习题43 基本的面向对象分析和设计
通过面向对象编程(OOP)构建一些东西的流程(常用)(自顶向下)
- 把要解决的问题写下来,或者画出来。
- 将第一条中的关键概念提取出来并加以研究。
- 创建一个类层次结构和对象图。
- 用代码实现各个类,并写一个测试来运行它们。
- 重复上述步骤并细化代码。
(自底向上)
- 取出要解决的问题中的一小块,写些代码让它差不多能工作。
- 加上类和自动测试,细化代码让它更为正式。
- 把关键概念抽取出来然后研究它们。
- 把真正需要实现的东西描述出来。
- 回去细化代码,有可能需要全部丢弃重头做起。
- 在问题的另外一小块里重复上述流程。
from sys import exit
from random import randint
from textwrap import dedent
# 场景
class Scene(object):
def enter(self):
print("该场景尚未配置。")
print("将其子类化并将enter()补充完整。")
exit(1)
# 引擎
class Engine(object):
def __init__(self, scene_map):
self.scene_map = scene_map
## 在play运行的开始,current-scene和last-scene是不等的,后来使current_scene变化,令其等于始终未变的last_scene,以确保游戏进行到下一个场景
def play(self):
print(">>>>>>>>>>>start play")
current_scene = self.scene_map.opening_scene() # 返回开始场景的键值对对应的类
last_scene = self.scene_map.next_scene('finished') # 返回Finished()类
print(">>>>>>>>>>>>>>>>after play, current_scene:", current_scene, "last_scene:", last_scene)
print("^^^^^^^^^^^^^^^ before while, current_scene:", current_scene, "last_scene:", last_scene)
while current_scene != last_scene: # 若当前场景非Finished()类
print("&&&&&&&&&&&&&&&&&&&&&&before n = c, c =", current_scene, "last_scene", last_scene)
next_scene_name = current_scene.enter() # 返回当前场景的enter()函数
print("##################after n = c, current_scene:", current_scene, "last_scene:", last_scene, "next_scene_name:", next_scene_name)
current_scene = self.scene_map.next_scene(next_scene_name)
print(">>>>>>>>>>>>>>>>