---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
在自学.net学习视频的过程中,对于面向对象的概念总是带着一点朦朦胧胧的感觉,把握不好。可是作为一种编程语言的思想,我觉得有必要在开始阶段就对面向对象的思想做一些理解,感觉这样对以后的学习可以带来不错的帮助,以下是在论坛交流的结果:
茹化肖:
对象。首先你得知道什么类到底是怎么样一个概念。天地万物,我们都可以抽象为类。比如 房子 ,车,飞机,人、等等 都是类。但是呢,房子中有别墅,四合院,平方,瓦房 等等的不同,但是还是房子啊 ?所以是由房子 这个类所产生的对象。人 是类,男人 女人 老人 小孩 你 我 他 这些都是人的对象。我们把这个概念实现 就是相当于 给类对象实例化。。。。。。后面省略一万字。
就相当于一个微波炉,你把东西(参数)放进去,经过处理后变成香喷喷的食物(返回值),你不需要知道微波炉怎么运转的,你只要准备原料就行。(这是封装)而且这个微波炉你可以用,给了别人别人也可以用,别人说不定按照这个微波炉制造了第二个微波炉,同时这第二个微波炉还新增了调节火力大小的功能(这是继承),你把方便面装进去拿出来的时候变成了煮方便面,把玉米放进去拿出来的是煮玉米,原料不同拿出来的结果也不同,但都是微波炉做出来的。(这是多态)
我的理解:面向对象就是指针对我没要解决的问题写方法,离开这个对象之后就什么都不是了,同样对这个对象所做的所有方法都不影响到其他的对象。可以增强代码的可读性、重复利用性,解决了代码的重写问题。使代码更有安全性,对象中的属性只能通过对象去操作。
大概就是自定义数据类型吧,数据类型可以有属于自己的属性 方法 事件 不管是自己定义的还是继承与别人的。
许庭洲:
1. 对象: 一辆汽车 2. 类: 比如每一辆汽车是一个对象的话,所有的汽车可以作为一个摸板,就定义汽车这个类; 3. 继承: 汽车作为一个类已经存在, 作为具有自身特征的卡车就可以从汽车类中继承。 |
我的了解:面向对象这种思想就是以对象为中心,属性,方法和事件等都是以对象存在为前提,也就是说,如果没有对象了,这些东西也就不存在了,所以,面向对象的代码是模块化的,即一段代码完成一个小的功能,这些功能又是对象所具有的,也就是通过对象将一些联系不大或者没有联系的代码组合关联起来,这些关联起来的功能块代码形成对对象的完整的描述。
岁月渲染:
面向对象就是对项目上来说一种思维方式,对一个项目的编程整体抽象出几个或多个类,再根据这些类编写该项目的程序的过程,但是这个过程必须用到类和对象,类就是对相似事物的抽象,比如就是车类 、人类、动物类等等,而对象就是类的实例化,比类更具体。例如车类中的(我眼前的黑色奥迪A8)就可以称为车类的一个对象。同时也设计到了封装、继承、多态。。。。。。。。。
师弟:
我简单的理解,就是面向对象的语言为了模拟现实世界,把所有能见事物都当做对象处理。
个人比较喜欢最后这名网名叫师弟的同学所说,面向对象的语言为了模拟现实世界,把所有能见事物都当做对象处理。
我感觉中的面向对象就像是一个假象的世界一样,细算的话其实什么都不能直接拿出来,但是每一样都可以具象化出来产生实例,然后为己所用,在这样想的时候感觉自己就像造物的神,嘿嘿,神说要有光,于是便有了光。也许自己爱上编程就是因为这种造物的快感吧。
然后是面向对象编程设计的几个原则,留下来,方便学习:
面向对象编程中类设计的几个原则
1. 开闭原则(the Open Closed Principle OCP)
一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的。因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。我们以收音机的例子为例,讲述面向对象的开闭原则。我们收听节目时需要打开收音机电源,对准电台频率和进行音量调节。但是对于不同的收音机,实现这三个步骤的细节往往有所不同。比如自动收缩电台的收音机和按钮式收缩在操作细节上并不相同。因此,我们不太可能针对每种不同类型的收音机通过一个收音机类来实现(通过重载)这些不同的操作方式。但是我们可以定义一个收音机接口,提供开机、关机、增加频率、降低频率、增加音量、降低音量六个抽象方法。不同的收音机继承并实现这六个抽象方法。这样新增收音机类型不会影响其它原有的收音机类型,收音机类型扩展极为方便。此外,已存在的收音机类型在修改其操作方法时也不会影响到其它类型的收音机。
2. 替换原则 (the Liskov Substitution Principle LSP)
子类应当可以替换父类并出现在父类能够出现的任何地方。这个原则是Liskov于1987年提出的设计原则。它同样可以从Bertrand Meyer 的DBC (Design by Contract) 的概念推出。
我们以学生为例,夜校生为学生的子类,因此在任何学生可以出现的地方,夜校生均可出现。这个例子有些牵强,一个能够反映这个原则的例子时圆和椭圆,圆是椭圆的一个特殊子类。因此任何出现椭圆的地方,圆均可以出现。但反过来就可能行不通。
运用替换原则时,我们尽量把类B设计为抽象类或者接口,让C类继承类B(接口B)并实现操作A和操作B,运行时,类C实例替换B,这样我们即可进行新类的扩展(继承类B或接口B),同时无须对类A进行修改。
3. 依赖原则 (the Dependency Inversion Principle DIP)
在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。
在结构化设计中,我们可以看到底层的模块是对高层抽象模块的实现(高层抽象模块通过调用底层模块),这说明,抽象的模块要依赖具体实现相关的模块,底层模块的具体实现发生变动时将会严重影响高层抽象的模块,显然这是结构化方法的一个"硬伤"。
面向对象方法的依赖关系刚好相反,具体实现类依赖于抽象类和接口。
为此,我们在进行业务设计时,应尽量在接口或抽象类中定义业务方法的原型,并通过具体的实现类(子类)来实现该业务方法,业务方法内容的修改将不会影响到运行时业务方法的调用。
4. 接口分离原则(the Interface Segregation Principle ISP)
采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。
ISP原则是另外一个支持诸如COM等组件化的使能技术。缺少ISP,组件、类的可用性和移植性将大打折扣。
这个原则的本质相当简单。如果你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。
以上四个原则是面向对象中常常用到的原则。此外,除上述四原则外,还有一些常用的经验诸如类结构层次以三到四层为宜、类的职责明确化(一个类对应一个具体职责)等可供我们在进行面向对象设计参考。但就上面的几个原则看来,我们看到这些类在几何分布上呈现树型拓扑的关系,这是一种良好、开放式的线性关系、具有较低的设计复杂度。一般说来,在软件设计中我们应当尽量避免出现带有闭包、循环的设计关系,它们反映的是较大的耦合度和设计复杂化。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------