fan42

一、前言

  一学期的面向对象程序设计的课程已经结束了,对于该课程的课堂内容及作业中的收获以及对学完该课程的感想。

二、课程感想

  不知不觉面向对象程序设计这门课已经结束,而我从一开始在面向过程思想上的根深蒂固导致在学习OO的不适应,在老师的讲解以及作业的练习之下慢慢的改变着自己的思维方式,同时也渐渐的体会到了OO思想的精髓所在:万物皆对象。对OO的五大基本原则,以及三大特性有了进一步的了解,以下便是我通过网上资料的学习得到的一些理解。

1. OO的基本原则理解 ;

  1) 单一职责原则:对于一个类而言,应该仅有一个引起它变化的原因。

  原因:开放-封闭原则是面向对象编程的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可拓展、可复用、灵活性好。开发人员应该仅仅对程序中呈现出频繁变化的那些部分做出抽象,然而对于应用程序中的每个部分都刻意进行抽象同样不是一个好主意。拒绝不成功的抽象和抽象本身一样重要。

  2) 开放-封闭原则:软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改。

  原因:开放-封闭原则是面向对象编程的核心所在。遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可拓展、可复用、灵活性好。

  3) 里氏替换原则:子类型必须能够替换掉它们的父类型。

  原因:只有当子类型可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。正是由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展。

  4) 依赖倒置原则:A高层模块不应该依赖底层模块,两个都应该依赖抽象。B抽象不应该依赖细节。细节应该依赖抽象。

  原因:依赖倒转其实可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之那就是过程话的设计了。

  5) 接口隔离原则:A客户端不应该依赖它不需要的接口。B一个类对另一个类的依赖应该建立在最小的接口上。

  原因:使用多个专门的接口比使用单一的总接口要好。一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。

2. OO的封装性、继承性与多态性三大特性;

  1) 封装性:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。

  好处:提高了代码的可用性和可维护性,通过封装对对象内部状态的保护。

  2) 继承性:把多种有着共同特性的多的类事物抽象成一个类,这个类就是多个类的父类。父类的意义在于可以抽取多个类的共性,代码复用,减少代码量。

  好处:降低了代码的复杂度,对于共同继承父类同一方法维护时只需修改父类中的方法即可,便于维护。

  3) 多态性: 属性或方法在子类中表现为多种形态,子类对父类中的属性有所区别时,可以对父类方法进行重写。

  好处:便于子类对父类方法或属性的替换与扩充,便于接口的使用(向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的),它在应用中体现了灵活多样的操作,提高了使用效率,多态简化对应用软件的代码编写和修改过程。

3. 基于以上内容为核心的一种程序设计思想于是便使得其有以下优点:

  1)易维护

  采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。

  2)质量高

  在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。

  3)效率高

  在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。

  4)易扩展

  由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

4. 但是也会因此产生一个最主要的缺点

  在性能方面面向对象比面向过程低。

5.总结

 

  在我看来这四个月的学习之下收获颇丰。老师课前都会准备好丰富的内容,虽然因为疫情的原因,无奈没法去学校上课,只能在网上以网络授课的方式进行,即便如此,老师上课时所讲的内容都十分通俗易懂,不仅如此每节课老师都会根据所讲的内容布置一个当天完成的课堂作业,以便于同学们及时熟悉所学的内容。老师布置的作业一开始都会给我们类图,根据老师的思路去完成程序的编写,去感受面对对象的思维方式,让自己从面向过程向面向对象进行转变,一开始的转变过程比较困难,但在熟悉之后便发现面向对象的思维方式更加舒服。

  总的来说OO的学习拓展了我的思维方式,也让我在编程能力方面有了进一步的提升,虽然如今课程结束了,但是课程上所学到的都只是最基础的内容和最核心的思维方式,之后想要在这方面继续努力,自我学习是十分必要的,虽然以后没有了这门课,没有了作业,但是我也会尝试去做一些题目去了解一些拓展知识,毕竟课堂所学有限,而编程方面的东西是学不完的,而且更新的速度是很快,要想不被淘汰就要不断的学习新知识。

 

分类:

技术点:

相关文章: