`
kkkloveyou
  • 浏览: 26067 次
文章分类
社区版块
存档分类
最新评论

什么是“面向对象编程”?用理论指导编程思想

 
阅读更多

同志有句名言,叫做“不管黑猫白猫,能抓耗子的就是好猫”,生动形象揭示了面向对象编程思想的精髓。

黑猫、白猫,在现实世界中就是一个个活生生的对象【1】,他们有相同点,比如都是四个爪子,长胡须,爱吃鱼,会逮耗子;他们有各自的个性,比如花色不同,如厕拉屎的时机不同等等。面向对象编程语言就是充分模拟现实世界,将黑猫、白猫身上相同的特点属性和行为进行抽象,把属性和方法都封装【3】在一个称之为类【2】的东东里面,他们称之为猫类。

假设:上帝让黑猫和白猫make love生下了小花猫(程序员就是上帝),小花猫就会继承【4】猫类的特点,小花猫叫做子类,黑猫就叫做父类,子类拥有父类的属性、行为。但父类的属性和方法不一定都会被子类继承,比如:黑猫的黑毛(属性)没有被继承,黑猫扣女的方法(行为)也木有被继承。小猫在继承父类的方法时,虽然所继承的方法名跟父类相同,比如都是吃饭这个行为,但是子类可以改写(override)【5】父类的方法,因为小花猫认为父类的食量太大,不环保。小花猫将父类的吃饭这个行为改为了小食量的。

小猫的叫法可以不同,虽然他们都是“叫”这个行为。黑猫用力打小猫,小猫叫声就凄惨了,白猫给小猫奶喝,小猫就很愉悦地叫。传递的参数不同,执行方法效果不同,这个就是重载【6】。

假如,我爸是李刚,李刚认为,我是受过思想的教育的,自己贪污入狱就算了,绝对不能连累子孙,于是,他将贪污这个方法设为了私有(private),祸不及妻儿,子类就无法继承这个方法。

还有一种猫,他练辟邪剑谱,把自己阉了,已然是一个final了,注定子孙十八代都断绝了,这个就是静态类【10】,不被继承。

两只猫,不停杂交,子孙千千万万都不同,形成了猫类的多态【7】。

不幸,老猫被雷劈了,残了,叫不出声音了,但他认为,他生的小猫得有声音才是,于是,他将“叫”当成是一个抽象方法,他自己不实现,留着给子孙实现。有抽象方法的类就是抽象类【8】。

当年大笔一挥,说“改革开放好”,于是广大人民群众就热血沸腾,一把劲都搞经济建设去了。但具体的,什么是改革开放,农民懂个毛,大学生也没有几个人搞得清楚。政策就是方向,就是规定,接口【9】像是政策,要实现这个“十二五规划”人均GDP达到xx水平奔向小康社会新胜利,接口规定的是达到什么样的目标,但不给出具体的方法实现。同志才不管具体的实施,实施者是广大人民群众,“人民是真正的英雄”(语)

注释:

1】对象

具体事物的抽象。对象=属性+(对属性操作的)方法

2】类

是具有相同操作功能(方法)和相同的数据(属性)的对象的集合,类是对象的抽象,对象是类的一个具体实例。

类可以被反复调用、重用

3】封装

把对象的属性和方法结合在一个独立的单元里面,尽可能的隐蔽对象的内部细节,只保留一个接口同外界通信。

4】继承

子类具有父类的特征的同时,也有自己的特点。当然父类也有一些自己的特点不想被子类所继承,就用static标识。

5】重写

子类继承了父类的方法,但子类不执行父类的方法,而写了一个跟父类方法名字相同的方法,这样父类的方法就被覆盖了,不被执行,只执行子类自己的方法。

6】重载:方法名字相同,传递的参数不同,执行方法效果不同。

7】多态:因为有了重写和重载,所以就有了多态、

8】抽象类:有抽象方法的类就是抽象类。不能实例化,只能给子类继承。

9】接口:只负责方法的声明,声明的方法不包含方法体

【10】静态类:一个类中,所有成员都是静态成员,即都用static 修饰,该类即为静态类,用final修饰(而不是static)。静态类不被继承,不能实例化。

分享到:
评论

相关推荐

    现代C++编程:从基础到实战项目全覆盖.docx

    本教程旨在为初学者和中级程序员提供一个全面的C++学习路径,内容涵盖从基础语法、面向对象编程到高级特性如模板和STL的使用。我们将通过理论讲解与实际案例相结合的方式,帮助读者深入理解C++的强大功能。除此之外...

    Head First Java 第2版 中文版.pdf

    《HeadFirstJava》(中文版)(第2版)是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导。此书是根据学习理论所设计的,让你可以从学习程序语言的基础开始一直到包括线程、网络与分布式程序等项目。最...

    JAVA核心技术

    首先,你要了解的是GOF的《设计模式--可复用面向对象软件的基础》一书(这个可以说是程序员必备的了),注意:GOF不是一个人,而是指四个人。它的原意是Gangs Of Four,就是“四人帮”,就是指此书的四个作者:Erich ...

    java课程设计指导书.doc

    二、课程设计目的和意义 目前,很多新的技术领域都涉及到了Java语言,Java语言是面向对象编程,并涉及到 网络、多线程等重要的基础知识,因此Java 语言也是学习面向对象编程和网络编程的首选语言。按照教学培养计划...

    值类型与引用类型理论内容.part01.rar

    通过实际项目深入理解和掌握C# 基本语法、面向对象的思想、类的概念和使用、对象的创建、排序、IO操作等 数据库知识和 SQL Server 2000 (40课时) 讲授数据库的基本知识和SQL Server 2000, 讲授数据库的设计和...

    值类型与引用类型理论内容.part05.rar

    通过实际项目深入理解和掌握C# 基本语法、面向对象的思想、类的概念和使用、对象的创建、排序、IO操作等 数据库知识和 SQL Server 2000 (40课时) 讲授数据库的基本知识和SQL Server 2000, 讲授数据库的设计和...

    Thinking in Java 3th Edition完整(含习题和答案)

    本书指导读者利用JAVA语言进行面向对象的程序设计,详细介绍了JAVA的基本语法及它的高级特性(网络编程、高级面向对象能力、多线程),系统地讲述了JAVA的高级理论,形象地阐述了面向对象基本理论。

    《软件设计精要与模式》高清带书签

    本书关注的焦点是软件设计,涵盖了大部分与设计有关的基本要素,包括面向对象思想、设计模式、重构、测试驱动开发、极限编程以及软件体系架构。其中,尤以设计模式为主,深入探讨了软件设计过程中的原则与模式,并...

    Java课程设计-21点小游戏(2).docx

    以前对面向对象认识和概念是有点模糊的,现在通过自己动手做课程设计,从实践上认识了面向对象编程是如何通过对象来简化面向过程中的操作。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意尽力寻找...

    计算机毕业设计:Java实现的好运咖啡管理系统(源码+说明+论文),保证可靠运行,附赠计算机答辩PPT模板

    通过这套源码,学生可以深入了解Java编程的核心概念和技术,掌握面向对象编程的思想和方法。同时,源码中的模块划分合理,功能实现完善,包括商品管理、订单处理、库存管理等多个模块,能够满足咖啡店的日常运营需求...

    软件设计精要与模式

    《软件设计精要与模式(第2版)》关注的焦点是软件设计,涵盖了大部分与设计有关的基本要素,包括面向对象思想、设计模式、重构、测试驱动开发、极限编程以及软件体系架构。其中,尤以设计模式为主,深入探讨了软件...

    Java课程设计-21点小游戏.docx

    以前对面向对象认识和概念是有点模糊的,现在通过自己动手做课程设计,从实践上认识了面向对象编程是如何通过对象来简化面向过程中的操作。课程设计中程序比较复杂,在调试时应该仔细,在程序调试时,注意尽力寻找...

    c#学习笔记.txt

    看完了前面几段,我的朋友提出了不同的意见:C#不是Java的Clone,它只是长得有些像Java而已,其实面向对象、中间语言什么的也不是什么新玩意儿,非Sun独创,有文为证:华山论剑:C#对Java。另外他对我上一集中说...

    Visual C# 2005数据库通用模块开发与系统移植 配书目录及代码,这样看代码就方便了

     本书以面向对象思想和设计模式为指导,通过大量实例,详细介绍了ADO.NET、基于数据库应用的通用模块、数据库系统综合实例设计和开发、数据库的移植升级、项目打包发布和安装等方面的应用技术,内容包括数据库开发...

    Java毕业设计-基于springboot开发的物流管理系统-毕业论文(附毕设源代码).rar

    在开发过程中,项目注重代码的规范性和可维护性,采用了面向对象的编程思想,使得代码结构清晰、易于理解。同时,项目还充分利用了Spring Boot框架的优势,实现了快速开发、易于部署和高度可扩展性。 毕业论文方面...

    java猜数字游戏课程设计.doc

    此学习过程中,一方面巩固了学生的JAVA程序设计的应用,加深对JAVA语言的掌握 及对面向对象程序设计基本思想的理解,提高对面向对象技术的具体应用;另一方面, 猜数游戏可以通过JAVA设计展现其娱乐性,游戏简单...

    计算机程序设计语言发展史和对程序设计语言未来的看法.docx

    【关键字】 自然辩证法计算机语言汁算机技术编程语言因特网面向对象 一、引言 一九九三年美国的克林顿政府提出了 "信息高速公路"计划,从而在这十多年 间在全球范围内引发了一场信息风暴,信息技术儿乎触及了现代...

Global site tag (gtag.js) - Google Analytics