首页 > 编程知识 正文

面向对象六大设计原则,面向对象设计方法的概念

时间:2023-05-05 22:15:29 阅读:111223 作者:4504

引言劳动是知识的源泉,同样面向对象技术也是基于在软件开发过程中不断发现问题和解决问题而产生的。 了解面向对象技术解决软件开发中的问题,有助于我们站在面向对象技术的制高点,感悟前人解决问题的思想,实现创新学习,同时挖掘才能,有助于我们学习该技术。

在基于面向对象技术的动机面向对象出现之前,结构化编程是编程的主流,结构化编程又称为面向过程编程。 在面向过程的编程中,问题被视为一系列要完成的任务,函数(一般指例程、函数和过程)用于完成这些任务,解决问题的重点在于函数。 函数是面向过程的,关注如何根据规定的条件完成指定的任务。 软件应用领域越来越广泛,面临着需求不确定性、规定条件不确定性、面向过程的编程难以维护、难以扩展等问题。 例如:

初始要求:从键盘读取字符并输出到打印机的程序

void Copy () {int c; while((c=rdkbd ) )!=EOF ) WRTptr(c ); (一次变化)用户希望复印程序能从纸带读入机读入信息,并作如下修改。

bool ptFlag=false; void Copy () {int c; wile () ) c=) ptflag? RDPT(:rdkbd ) )!=EOF ) WRTptr(c ); }需求再次变化,客户希望复印程序能输出到纸带穿孔机,修改如下。

bool ptFlag=false; bool punchFlag=false; //remembertoresettheseflagvoidcopy ({ intc; wile () ) c=) ptflag? RDPT(:rdkbd ) )!=eof (punch标志)? wrtpunch(c ) : WrtPtr(c ) c; }有一个问题:

僵化:单一更改会使依赖关系模块中的连锁更改变得脆弱。 进行一个变更的话,有可能在与程序概念上没有关联的地方产生问题。

稳健:提出和复用代码很复杂。

不必要的复杂性:包含无用的代码。

不必要的重复:每个重复的代码体大致相似,但有细微的差异。

模糊性:模块难以理解。

随着需求的进一步变化,不良味道的倾向变得更严重,程序确实会混乱。

面向对象技术的第二次软件危机的根本原因还是软件生产力远远跟不上硬件和业务的发展,第一次软件危机主要表现在“复杂性”,第二次软件危机主要表现在“扩展性”、“可维护性” 面向对象技术是为了解决软件的可扩展性、可修改性、可交换性问题而产生的技术。 具体说明如下。

可扩展性:新需求可以很容易地添加到系统中,而不会带来新的缺陷。

可维护性:修改代码时不破坏系统现有结构或影响其他部分。

可替换性:可以在不影响系统的情况下,将系统中的一些代码替换为同一接口上的其他类。

因此,“好的面向对象设计”是指能够“适应变化,提高复用”的设计,是衡量软件设计好坏的唯一标准。

面向对象技术概念是指以对象概念为基础,以对象为中心,以类和继承为结构机制,充分利用接口和多态性提供灵活性,认识、理解、刻划、构建客观世界和相应的软件系统封装解决可维护性问题;继承解决复用性问题;多态解决扩展性和可替换性问题

面向对象技术如何解决上述问题:

void reader { public : virtualintread ()=0; (; classkeyboardreader : public reader { public : virtualintread (} { returnrdkbd ); }; classtype reader : public reader { public : virtualintread (} { returnrdpt ); }; voidcopy(readerreader ) {int c; while((c=reader.read ) )!=EOF ) WRTptr(c ); }依赖于抽象Reader,而不依赖于具体。 可扩展性很容易被替换。 TypeReader可以替换密钥读取器,不会破坏系统副本的现有结构,也不会影响其他部分; 创建奇怪的鞋垫或修改TypeReader代码不会影响copy代码或KeyboardReader代码。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。