一、面相对象的三大机制(封装、继承、多态)
1、封装:实现内部的代码 2、继承:能够复用现有的代码 3、多态:重写对象的行为方法
学习C#的语言,我们都知道三大机制的语法基础,就像学习课本一样,先学习认识字一样,不过懂的面向对象三大机制不代表我们懂得了面向对象方面的设计,学习面向对象机制所带来的抽象意义,并且使用面向对象的思维更好地表达现实世界。
二、软件设计
为什么需要软件设计?我们记住软件设计的终极目标是复用。软件设计可以让我们的系统模块与模块之间的关系变得松耦合,有利于后期代码的维护和扩展,如果说把一家公司的每种员工计算工资的方式糅合在一个方法里面,在这个方法中通过员工类型的判断,然后各自写一个计算工资的方式,在现有的员工职位是能够满足系统的需要,但是如果公司再新增一种职位,如我们都喜欢的“程序员鼓励师” ,那么我是不是再要找到这个方法并且继续修改这个方法来新加一个“鼓励师”工资的计算方式呢! 这种方式不能满足程序的变化,而且破坏了我们常说的“开闭原则----对修改封闭,对扩展开放”。要对软件进行设计,必须要理解客户的需求,必须对系统进行深入的分析,不要一接到项目上来就盲目套设计模式,这是很危险的行为,切记切记!因为设计模式就是为了模拟解决生活中问题。
三、软件设计复杂度的根本原因——变化
世间万物没有一层不变的东西,有些变得很快,有些会变得很慢,而且在生活中应对客户的需求、市场的变化、技术的发展都有可能造成事物在不断的更新和发展。所以导致有很多复杂的问题,我们要懂得把复杂的问题分解为多个简单问题进行处理,从更高层次来说,我们需要学会发现它们的共性,更具体来讲就是本质,忽略它们的非本质细节,而去处理泛化和理想化的对象模型,面向对象最大的优势在于可以抵御变化,所以说我们懂得封装、继承和多态并不等于我们掌握了面向对象编程。
四、重新认识面向对象
1.隔离变化
面向对象的构建要适应软件的变化,能将变化影响降低到最小。
2.各司其职
面向对象强调各类的职责,新增员工类型不会影响到原来员工类型的实现代码,这更加地符合真实的世界,也能控制变化所影响的范围。
3.认识对象
从概念来讲:对象拥有某种责任的抽象。
从规格来讲:对象是一系列可被使用的公共接口。
从语言实现来讲:对象封装了代码和数据。
五、面向对象设计准则
1.针对接口编程,而不是针对实现编程,客户无需知道使用对象的实际类型,只需知道拥有客户所期望的接口。
2.优先使用对象组合,而不是类继承,继承在某种程度上破坏了封装性,子父类耦合度高,而对象的组合只要求被组合的对象具有良好定义的接口,耦合度低。
3.封装变化点,使用封装创建对象之间的分解层,让设计者可以在分层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次间的松耦合。