转载:软件设计与哲学,做人

企业软件设计的方法论是每一个软件设计人员都必须学习、掌握、应用的,在实践中必须有方法论的指导才能取得良好的效果,才能设计出优秀的企业软件。那么,到底什么是企业软件设计的方法论呢?它有哪些要素呢?我们从哪几个层面来把握它呢?要弄清这些问题,我想还是先了解一下这里面涉及到的几个概念。

企业软件是一个信息系统,信息、系统、信息系统的概念我在以前的帖子中也有说过(http: //www.jdon.com/jivejdon/thread/32743.html),但是说得不够深入,这里再补充一点,到底什么是信息呢?我们之前说信息是经过加工处理的数据,数据是信息的载体,这只 能说是信息的一般意义,并没有道出信息的本质。那么信息的本质是什么呢,信息的本质是关于事物的运动的状态和规律的表征,是为了消除我们对事物认识的某种不确定性的东西。系统的概念这里也补充一点,系统的基本特征是什么呢?一是整体性,二是综合性,但还有非常重要的一点,那就是整体最优化,确定最佳目标,寻求最佳设计,在运动中达到一种有序的状态,即在运动中求平衡,求稳定,达到最佳控制。了解了信息系统,我们再来了解一下设计。什么是设计?我们都知道分析是解决“是什么”的问题,设计是解决“怎么做”的问题,但是,何为设?何为计?我觉得这个设有两层含义,一是假设,就是要预测未发生的事情,二是设法,就是想办法解决问题。“计”是为什么着想的意思,所以我们的设计有很重要的一层含义就是要为没有发生的事情着想,预测未来,做事留有扩展和退却的余地,这和做人是一个道理。

方法论是关于方法的理论,方法的概念我在“用科学的思维方法指导软件的设计开发” 中有讲过,但现在看来感觉还是不够全面。这里我引用李志才方法论全书中的关于方法的定义:方法是关于认识世界和改造世界的目的方向,途径,策略手段,工具及其操作程序的选择系统。我们可以这样来理解,目的方向的选择就是战略问题,途径的选择就是路线问题,策略手段的选择就是政策和策略问题,工具及其操作程序的选择就是战术问题。这是方法的四大要素,也可以说是四个层次,从上到下层层相扣,缺一不可。从另一个角度来说,方是方向,法是法则,规律,万物皆规律,有法天下和,方法的选择其实也就是要遵循事物的规律,就是循道,循道是最科学的方法论。

理解了这些概念后,我们再来寻找企业软件设计方法论,还是从概念出发吧,就从方法的四个要素出发,找到企业软件设计的目的方向,途径,策略手段,工具及其操作程序,这就是企业软件设计的方法论。

一、 目的方向
目的方向是方法的最高层次问题,是战略问题,直接决定了方法的正确与否,目的方向错了,就算你后面的路线、策略手段得当,最终做出来的软件还是低质量的。也许你会觉得目的方向的选择很简单,做软件嘛,不就是要能满足客户的需求吗?这句话本身并没有错,关键是对需求的理解,普通的理解客户的需求是指业务功能需求,但是,时代在变,需求的定义也在变,软件的灵活扩展性,可维护性也越来越突出为客户的需求了,而功能需求虽然也重要,但从我们的软件实现上来说要比灵活扩展性和可维护性容易实现得多,作为软件设计人员,怎么保证软件的灵活扩展性和可维护性才是真正的难点。所以,目前来说,正确的目的方向应该是软件的高灵活扩展性,高可维护性,也就是软件的质,这才是软件的生命力所在。
二、 途径
途径问题也就是路线问题,对企业软件来说,现在有两条典型的路线,一是走面向数据库的路线,另一条是走面向对象的路线。这是两条决然不同的路线,说得严重点是水火不融,但我感到疑惑的是为什么还是有很多人分不清楚这两条路。目前大部分公司和个人都是走的面向数据库路线,面向对象的道路上真可以说是“路上行人欲断魂”!但是,新生事物总是要战胜旧事物的,我相信面向对象的路上会有越来越多的同路人。
三、 策略手段
选定了途径后我们就该选择合适的策略手段了,可以说架构分层,框架的运用,领域建模,设计模式都是我们所采用的策略手段了。从狭义上说这也是我们通常所说的方法了,在这一层面上,是软件设计人员最具有发挥和创造空间的。这几个策略手段具体的讨论在论坛里面已经有很多这样的帖子了,我在这里就不多说了。
四、 工具及其操作程序
工具及其操作程序的选择是在上一环节的基础上进行的,包括编程语言及编程工具的选择,其他的还有建模工具、具体框架的选择。选定了工具后要熟悉这些工具的操作程序,运用工具时要遵循一定的操作程序,这样才能真正发挥工具的作用。

从以上的分析我们可以看出,正确地选择企业软件设计方法需要很多方面的知识,我们首先需要构造我们的知识体系,这个我在“关于构建自己的知识体系架构”中也提到过,但是我们还要知道的是有了这些知识还并不等于你就有科学的方法了,方法系统是知识系统的升华,是理论与实践的桥梁。而且我们还必须知道,方法要素的选择在很多时候也是一个子方法系统,同样包含方法的四大要素。

本文是我的一点愚见,只是概略地叙述了一下方法论的要素,可能大家会觉得很虚,还望不要猛拍砖,呵呵。希望能与大家共同讨论更具体的方法论。本文定有不足之处,恳请各位网友批评指正!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个问题可以分成两个部分来回答:设计和实现。 **设计** 对于这个问题,我们可以先列出一些需要考虑的因素: 1. 餐厅的布局和座位安排 2. 进餐的时间和顺序 3. 菜单和点菜方式 4. 点菜后的服务方式 5. 结账和离开餐厅的流程 基于上述因素,我们可以设计一个简单的模拟程序: 1. 创建一个餐厅对象,包含座位、菜单和服务员等属性。 2. 创建一个顾客对象,包含姓名、到达时间、点菜和离开餐厅时间等属性。 3. 在程序开始时,生成一批随机顾客,并按照到达时间排序。 4. 依次处理每个顾客:顾客到达餐厅,找到空座位坐下,翻阅菜单点餐,服务员记录点菜,等待上菜,吃完后离开餐厅,结账离开。 5. 在整个过程中,需要考虑餐厅座位的占用情况、服务员的工作状态、顾客的点菜和就餐时间等因素。 **实现** 基于上述设计,我们可以开始实现这个模拟程序。下面是一个简单的 Python 实现: ```python import time import random class Restaurant: def __init__(self, seats, menu): self.seats = seats self.menu = menu self.waiter = None self.customers = [] def add_customer(self, customer): if self.waiter is None: self.waiter = Waiter() if len(self.customers) < self.seats: self.customers.append(customer) return True else: return False def remove_customer(self, customer): if customer in self.customers: self.customers.remove(customer) def serve_customer(self): if self.waiter is not None: self.waiter.serve(self.customers) class Customer: def __init__(self, name, arrive_time): self.name = name self.arrive_time = arrive_time self.order = None self.eat_time = None self.leave_time = None def __lt__(self, other): return self.arrive_time < other.arrive_time def order_food(self, menu): self.order = random.choice(menu) def eat(self): self.eat_time = time.time() time.sleep(10) # simulate eating for 10 seconds self.leave_time = time.time() class Waiter: def __init__(self): self.busy = False def serve(self, customers): if not self.busy: self.busy = True for customer in customers: if customer.order is not None: print("Serving food to", customer.name) customer.eat() self.busy = False def main(): menu = ["steak", "pasta", "pizza", "salad"] restaurant = Restaurant(4, menu) # generate random customers customers = [] for i in range(10): name = "Customer {}".format(i + 1) arrive_time = random.randint(0, 30) customer = Customer(name, arrive_time) customer.order_food(menu) customers.append(customer) customers.sort() # start simulation for customer in customers: print(customer.name, "arrived at", customer.arrive_time, "seconds") seated = restaurant.add_customer(customer) if seated: print(customer.name, "is seated and ordering", customer.order) restaurant.serve_customer() restaurant.remove_customer(customer) print(customer.name, "leaves at", customer.leave_time - customer.arrive_time, "seconds") else: print(customer.name, "cannot find a seat and leaves") if __name__ == '__main__': main() ``` 这个程序模拟了一个简单的餐厅进餐过程。每个顾客在到达餐厅后,按照到达时间排队等待入座,如果有空位就坐下并点菜,等待服务员上菜,吃完后离开餐厅。服务员在顾客点菜后会将菜单传递给厨房,并等待上菜完成后再继续服务其他顾客。整个过程中,程序实时显示每个顾客的状态和离开时间。 当然,这只是一个简单的模拟程序,实际的餐厅进餐过程可能更为复杂,需要考虑更多的因素。但是,这个程序可以作为一个基础框架,根据实际需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值