浅析OOP

一、对象到底是个什么东西:

作为一个小白呢,我们首先还是搜索一下对象这个词语的意思,当然对象除了这里的意思之外,还有一个就是就是恋人的意思你懂的啦,在这里提前祝大家有对象的七夕节日快乐,没有对象的小伙伴呢,先看看我这篇文章,过不了多久也会找到对象的哦,��。

先看一下wiki中的定义:

在计算机科学中,对象(英语:object),是一个内存地址,其中拥有值,这个地址可能有标识符指向此处。对象可以是一个变量,一个数据结构,或是一个函数。是面向对象(Object Oriented)中的术语,既表示客观世界问题空间(Namespace)中的某个具体的事物,又表示软件系统解空间中的基本元素。

在软件系统中,对象具有唯一的标识符,对象包括属性(Properties)和方法(Methods),属性就是需要记忆的信息,方法就是对象能够提供的服务。在面向对象(Object Oriented)的软件中,对象(Object)是某一个类(Class)的实例(Instance)。

这里wiki上已经解释的非常详细了,刚刚开始的时候编程是面向过程的程序设计,但是由于大家发现面向对象的时候可以重复使用代码,并且具有更好的重用性以及可以加入各种设计模式,以使得开发和维护更加方便,所以随着面向对象的编程语言的兴起,面向对象的思想逐渐占领了广大软件工程师的开发思想。

关于面向过程和面向对象的区别,我在这里列举一个马士兵老师的经典的例子:
假如说我现在在郑州,我想去新疆,

  • 面向过程: 郑州–>西宁–>…..拉萨–>新疆
  • 面向对象: 郑州–>新疆

    那么你就会发现,面向对象比面向过程简单很多,因为面向对象其实是一种高度的封装,封装了内部的实现细节。

从形式上看,封装就是将数据和行为组合在一个包中,并向对象的使用者隐藏了数据的实现方式。
实现封装的关键在于绝对不能让类中的方法直接访问其他类的实例域

这就很好的解释了Java中为什么一直提倡使用settter和getter,python中也有对应的方法,因为这个只是给别的对象提供了一个修改对象状态的方法,是一种封装的表现。

对象的本质和一个变量、一个函数、一个数据结构等一样,他就是一个内存地址,这个内存地址上存放着一个类的实例。什么是类呢?人类就是一个类,我们大家都是人类,我们大家每个人都是人类这个类的实例,这样说,大家应该可以理解吧。
对于wiki上的第二段解释,对象有对应的属性和方法,举个例子:我们大家都是人类这个类的实例,那么我们每个人都有自己的性别,这个就是属性,方法:我们每个人都会写字,那么这个写字,就是我们每个实例对应的方法,每个人写字的姿势不尽相同,每个人用的笔也不尽相同,但是都是写字这个方法的体现。

二、什么是面向对象:

面向对象是相区别与面向过程来说的,面向对象就是使用对象作为程序设计的基本单元,在开始进行程序设计的时候,首先从业务中抽象出类,考虑类的关系,然后考虑每个类都应该有哪些属性和方法、以及其他的交互。
要想把面向对象玩的很溜,那么必须熟悉:继承,重写,多态。
类与类之间的关系有下面三种:

  • is-a: 比如狼是一种哺乳动物,体现了继承。
  • uses-a: 一个类的方法操作另一个类的对象,体现了依赖。
  • has-a: 一个类的对象包含另一个类的对象。

继承是一个类继承了另一个类的所有属性和方法,并且可以进行重写,方法名字一样,但是方法的行为不同。

继承可以使我们减少重复的代码做到便于维护,并且可以在必要的时候重写父类的方法。
多态:

多态(Polymorphism)是指由继承而产生的相关的不同的类,其对象对同一消息会做出不同的响应。例如,狗和鸡都有“叫()”这一方法,但是调用狗的“叫()”,狗会吠叫;调用鸡的“叫()”,鸡则会啼叫。

我的理解就是:多态就是继承了父类的子类在同一个行为下的不同表现。

四、DRY

KISS: Keep It Simple, Stupid

DRY: Don’t repeat yourself

这是unix设计开发的两大著名原则,KISS原则强调的是每次只需要做好一件事情,越简单的越好。DRY原则强调的是不要重复自己,避免出现程序中的信息冗余的情况,与DRY原则对应的是WET(write everything twice)。
面向对象编程就可以帮助你很好的实现DRY原则,如果父类抽象的足够好的情况下,那么子类就不需要重复父类中的一些方法,而只需要在必要的时候通过重写方法即可,完成子类的拓展的不同于父类的方法。

常见的重复有以下四类(源自《程序员修炼之道》):

  • 强加的重复:开发人员觉得无可选择,环境要求重复;
  • 无意的重复:开发者没有意识到自己在重复;
  • 无耐性的重复:开发者偷懒,重复是因为看起来会更容易;
  • 开发者之间的重复:团队之间的开发几个人重复了同样的信息。

通过OOP让复用变得更容易,降低重复的频率。

注:
引用的书目
[1] Java编程思想;
[2] Java核心技术 卷一(第十版)
[3] 程序员修炼之道

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值