软件系统的复杂性和面向对象编程

  你开发的软件系统复杂吗?有了数据库,有了网络组件,开发框架,好像也很容易开发出一个软件。这样看来,软件也并不复杂。但是为什么我们的开发速度那么慢呢?

为什么变得简单了?在于我们对系统进行了拆分,像搭积木一样。而具体到软件开发中,就是面向对象编程。好的软件系统向汽车结构,复杂的软件系统像人体结构。

软件想要实现更多的功能,必然会导致复杂度上升。虽然我们都力求化繁为简,但是改变不了大趋势。

  公司外包给供应商的项目,需要根据需求改变,但是在前期追求速度,代码封装太很,并且开发环境也不一样,如果做较大更改,难度很大,就像你无法理解其他人一样。

  但是代码确实控制行为,有什么代码,就有什么行为。

  但是要改那么多代码,怎么入手,真的很难办。现在供应商都是卖服务,就是将软件代码和硬件结合,以提供服务的方式卖给你,这样你去改代码,更加难了。

  设计模式很难定义,通俗来说,就像是写作文的套路。程序员在程序设计总结了很多开发经验,就形成了设计模式。其实在有了框架之后,不会去开发完整的应用,设计模式的重要性降低了很多。

基本思想:1.将变化的和不变的部分分开,在修改和维护时只需要改动变化的部分。

具体方式:

1.类继承是oop中的三大特点之一,可以实现代码复用,并且代码层次更清晰,但是继承会使类的耦合度变高,简单来说,一个类的改动可能会影响其他类,使代码的修改和维护变得困难。灵活性可以使用接口设计,通过继承接口,实现不同的行为,可以看到,代码的复用性降低了,于是又引入了在接口中的适配器。实现代码复用的其他方式为对象组合,将功能的实现委托(delegate)给其他对象。

2.多态:在向函数传递对象时,对象类型选择范围更广。不是针对具体类编程,扩展性更强。

3.很多现实生活中的行为都可以抽象成方法,当然,此时我们只是抽象思考,并不关心它们的具体实现方式。比如观察这模式。现实生活中的订阅报纸很像。那么事件类是怎么注册观察者的呢?其实很多gui的组件在处理用户交互的时候就用到了这种设计模式。这里还有个问题就是,谁主动订阅的?Observer持有Subject的对象引用,还是Subject对象持有Oberver对象的应用?在observer和observable中又存在push和pull的区别。就像报社发出了有新报纸的信号,报社推送给用户就是push,用户自己取就是pull,以该例子理解起来就不难了。

4.装饰器模式,通过组合对象,调用组合对象的代码,从而实现代码的复用。

5.工厂模式:对new进行封装,根据需要(参数)动态生成所需对象。

6.单例模式:通过类方法调用私有构造器,确保了只有一个对象。

posted @ 2018-07-02 15:54  懂得了才能做一些改变  阅读(484)  评论(0编辑  收藏  举报