面向对象语言具有封装,继承,多态的特征。那么在用面象对象语言进行程序设计的时候,我们应该要注意些什么,遵守哪些原则呢。 我们都知道在面向对象世界中拥有5大关系,6大原则,23种设计模式。那么他们是什么关系,到底有什么用呢。
我们定义类来封装对象,应该尽量的保证类职责的单一性,从而提高他的灵活性,重用性,扩展性和维护性。如果类职责R因为某种原因(比如说新需求)变成两个职责R1、R2,这时就发生了职责扩散。这个时候如果业务逻辑足够简单,我们可以修改原来的代码来满足新的职责;如果业务复杂但是类结构简单,我们可以新增方法来兼容。但是这时已经违反了单一职责原则,但这却是可以接受的,因为类依然具有一定程度的灵活性。当不满足这两种情况的时候,我们必须要重构设计来满足此原则。(单一职责原则)
类可以实现多个接口,类实现接口应该建立在最小的接口上,实现他必须的接口,不实现非必须的接口。在接口本身满足单一职责原则的情况下,各个接口必然是职责单一的。如果实现了非必须的接口,那么就会发生变更扩散。通俗上讲变更扩展是另一种形式的职责扩散。当类实现多个非必须接口往往会引入多个职责从而发生职责扩散。因此我们在设计上应该分散的定义多个接口满足单一职责原则,从而避免变更扩散,提高灵活性和可维护性。(接口隔离原则)
在面向对象编程中,继承给我们带来很大的灵活性和扩展性。但是庞大繁琐的继承结构往往会带来更多的复杂度以及难以维护。继承在面向对象编程中代表着 is a 的类的父子关系。子类就是父类,父类出现的地方都可以透明的替换成子类对象。多态是面象对象的另一特征,我们在继承时可以去重载父类的方法,因此他给我们带来了更大的灵活性和扩展性。在同时也给程序带来了巨大的破坏性和不确定性,使程序难以维护。因此在我们进行程序设计时要去维护正确的继承结构体系,从而维护系统架构的稳定性。继承时尽量去重载抽象方法,不去重载非抽象方法。在子类扩展新的方法。重载方法时保证前置条件更加宽松,后置条件更加严格。(里氏替换原则)
在程序设计时,我们往往创建多个具有不同职责的类,来提高系统的灵活性和扩展性。但是要实现一个复杂的业务逻辑就需要把这些类组合起来,形成更为复杂庞大的结构,他们间的交互关系错综复杂。UML中有五大关系:泛化(is a),关联(has a),聚合(has a),组合(contains a),依赖(use a)。在面向对象语言中继承和实现接口可以简单归结为泛化关系。关联,聚合,组合,依赖都是在讲对象间的交互关系;由此可见对象间的关系的组织是多么的重要。组合是一种强类型的聚合,聚合是单向的,聚合对象可以独立存在。但组合对象是一种整体性结构,不可独立存在,具有相同的生命周期。聚合是一种特殊的关联关系。关联不单是单向的,还可以是双向的叫双向关联,相互之间没有强制的约束关系,存在的形式可能是拥有一个成员变量的引用。当然这3种关系都是类范围内的关系,但是依赖关系却是方法范围内的。依赖体现为方法形参、返回值或静态调用。(五大关系)
在类与类之间相互交互时,应该使依赖的别的对象降到最少,因此叫最少知道原则。如果称形参、返回值、成员变量为直接朋友,其他依赖的对象叫间接朋友,那我们应该尽量依赖直接朋友不要去依赖间接朋友,保证只与直接朋友通信。如此一来类之间的耦合势必降到最低,类内达到较高聚合性。从而实现高耦合低内聚。(迪米特原则)
在软件设计时,按不同的职责创建大量具有不同职责的类,而将相关职责的类组合到一起形成模块,将相关的模块组合到一起形成子系统,再将子系统组合起来将形成系统。而同时可以使类、模块、子系统达到最大程序的重用。那么在对他们进行重新组合重用时,必须保证结构的稳定性,依赖的高度抽象性。软件设计的过程本质就是将现实世界抽象为计算机模型的过程。而抽象模型与具体模型相比往往更加稳定。因此我们要依赖抽象而不要去依赖具体。不管是类与类之间,还是模块与模块之间,他们不应该相互依赖,他们应该共同依赖抽象(接口),这实质上就是面向接口编程,从而也实现模块与模块间的低耦合,模块内的高内聚。(依赖倒置原则)
我们从类的角度理解了单一职责原则,从接口的角度理解了接口隔离原则,从继承角度理解了里氏替换原则,从UML角度理解了迪米特原则,从系统的角度理解了依赖倒置原则。如果将这五大原则联合起来考虑就不难发现他们实现了一个共同的目标就是实现软件的稳定性和扩展性:对修改关闭,对扩展开放。这就是开闭原则,他是前五种原则的总纲。(开闭原则)
简单总结,单一职责原则要求我们保证类的职责单一,避免职责扩展,提高类的灵活性与重用性。接口隔离原则要求我们分散定义接口,避免变更扩散,提高重用性与稳定性。里氏替换原则要求我们维护继承体系,在拥有软件扩展性的同时兼顾架构的稳定性。迪米特原则要求我们减少对别的对象的依赖,提高类内部的聚合性。依赖倒置原则要求我们面向接口编程,提高软件的扩展性和稳定性。开闭原则是总纲,是其他几个原则要实现的终级目标。
相关推荐
本资源“面向对象思想学习(精华版)”汇集了多位资深程序员的经验心得,旨在帮助初学者和有经验的开发者深入理解并掌握这一核心编程理念。 首先,面向对象思想的基础是三个主要概念:封装、继承和多态。封装是将...
面向对象程序设计是计算机科学中的核心概念之一,Java语言作为其典型代表,因其跨平台、安全性和稳定性等特性,被广泛应用于企业级应用开发。"面向对象程序设计-----java精品课件"是一份专为Java初学者和进阶者精心...
STL(Standard Template Library,标准模板库)是C++编程语言中不可或缺的一部分,它是面向对象编程的精华所在,因为它引入了泛型编程的概念,使得代码更具通用性和可复用性。STL的核心包括容器、迭代器、算法和函数...
Java 面向对象编程是Java语言的核心特性,它的精华在于通过封装、继承和多态这三个主要特征,将复杂的程序设计简化,使开发者能够更好地模拟真实世界中的实体和交互。面向对象思想强调将功能封装进对象,使得我们...
CS 反恐精英 射击游戏实例 C#源码 用到面向对象思路编程 京华志&精华志出品 希望大家互相学习,互相进步 支持CSDN 支持微软
《C++程序设计精华》是一...以上是对《C++程序设计精华》部分内容的解析,每章都包含了丰富的知识点,旨在帮助读者逐步掌握C++这一强大的编程语言,从基础到高级,从理论到实践,全面理解和应用C++的面向对象编程思想。
学习易语言面向对象精华,你需要深入理解这些概念,并通过编写实际的程序来巩固知识。实践中,你可以尝试设计并实现一些简单的类,例如,创建一个表示“学生”的类,包含姓名、年龄等属性,以及学习、考试等方法。...
设计模式是解决常见软件设计问题的经验总结,它们是面向对象设计的精华,能够帮助开发者快速理解和解决复杂问题。 6. **UML统一建模语言**:UML是软件开发中用于表示系统结构和行为的图形化工具,包括类图、对象图...
《面向对象程序设计》课程旨在教授学生C++的基本语法、面向对象编程的概念和思想。课程分为五个部分,第一部分作为基础,主要讲解C++的基本语法和面向对象编程的基础知识。通过学习,学生应能理解C++与C语言的关系,...
面向对象编程(Object-Oriented Programming,OOP)是一种广泛应用于现代软件开发的编程范式,它强调将现实世界的问题转化为计算机程序时,通过“对象”来组织代码。设计模式是这种编程思想中的精华,是解决软件设计...
#### 第六章:C++面向对象程序设计 面向对象编程是现代软件开发中最常用的方法之一,而C++作为一种支持面向对象特性的编程语言,在软件开发中占有重要地位。本章介绍了C++语言的基础知识,包括类和对象的概念、继承...
面向对象方法是一种把面向对象的思想应用于软件开发过程中的系统方法,它吸取了构造化程序设计的精华,以更接近人们通常思维的方式来处理问题,是一种全新的软件开发技术。 面向对象方法具有以下特点: * 抽象:...
每一种语言的程序设计思想大同小异,只是一些由语言特性的而带来的细微差别,比如Java中的Interface,你几乎在以前的学习中没有碰到过。以下我仔细给你说几点: 1。我们必须明确一个大方向,也就是说现在面向对象...
类、对象、属性、方法和继承等概念会逐步被介绍,帮助学生理解面向对象编程的思想。 电子教案还可能涵盖了错误处理和调试技术,这对于编写健壮的程序至关重要。学会使用On Error语句和Debug工具,可以及时发现和...
在教材选择上,吕军教授等人编写的《Visual C++与面向对象程序设计(第2版)》作为核心教材,与其他相关教材相结合,形成了课程的教材体系。这套教材内容涵盖了C语言基础、C++面向对象以及Windows编程,章节结构松紧...
通过这30个小程序,我们可以深入理解VB的基本概念、语法特性以及程序设计思想。 首先,VB的核心是事件驱动编程模型,这意味着程序的执行是由用户操作或系统事件触发的。比如,当用户点击按钮时,会触发某个事件,...
每一种语言的程序设计思想大同小异,只是一些由语言特性的而带来的细微差别,比如Java中的Interface,你几乎在以前的学习中没有碰到过。以下我仔细给你说几点: 1。我们必须明确一个大方向,也就是说现在面向对象...
第二部分以项目开发的流程为基础,循序渐进地通过迭代与增量开发RSS阅读器,逐步展示了C#中的委托、事件、控件、类库、I/O等技术,以及面向对象的设计思想;在第三部分C#高级编程中,介绍了多线程、数据库访问、用户...