1面向对象你真的懂吗

1. 代码评判标准
- 可维护:改老代码不容易引入新bug,不破坏原油代码设计添加功能
- 可读性:命名规范,易理解,编码规范
- 可扩展性:容易插入新的功能模块。对修改关闭,退扩展开放
- 简洁性:用简单高效的方案
- 可复用性:解耦,例如继承多态

2. 面向对象
- 四大特性:封装,抽象,继承,多态
- 设计原则:设计初衷对应解决的问题,SRP单一职责原则
- 设计模式:解决哪些问题,不过度应用

3. 面向对象特性详解
- 封装:隐藏信息,保护数据。类仅仅通过有限的方法暴露必要的操作,也能提高类的易用性。
如果我们把类属性都暴露给类的调用者,调用者想要正确地操作这些属性,就势必要对业务细节有足够的了解。
这就好比,如果一个冰箱有很多按钮,不一定能操作正确。相反,如果只有几个必要的按钮,比如开、停、调节温度,你一眼就能知道该如何来操作,而且操作出错的概率也会降低很多。
- 抽象:
- 小总结:抽象解决代码复用,is-a关系
- 抽象的意义:抽象是把复杂的问题分解成更小的问题,解决更小的问题,然后把小问题的解合并成大的问题。
- 继承:is-a提高代码复用,父类代码可重复使用,但会增加耦合,会导致可读性可维护性变差,相同功能的不同实现
- 多态:可扩展,复用性,父类一个方法可以有多个实现。调用子类来替代父类,提高扩展性和复用性,实现不同功能

抽象类与class的区别:抽象类实际上就是类,只不过是一种特殊的类,这种类不能被实例化为对象,只能被子类继承。

Logger案例abstract:1. 抽象类不能实例化(防止误用),2. 可以包含属性和方法,3. 抽象方法必须被重写(确保方法被重写防止遗漏,优雅实现多态)。
接口:1. 不能包含属性,2. 不能实现具体方法,3. 必须实现接口中的所有方法

抽象类能解决什么问题?
- 拥有比类更多的限制,反而减少了错误发生的可能性。
- 刚刚我们讲到,抽象类不能实例化,只能被继承。而前面的章节中,我们还讲到,继承能解决代码复用的问题。所以,抽象类也是为代码复用而生的。多个子类可以继承抽象类中定义的属性和方法,避免在子类中,重复编写相同的代码。
- 解决多态无法使用问题
- 从类的继承层次上来看,抽象类是一种自下而上的设计思路,先有子类的代码重复,然后再抽象成上层的父类(也就是抽象类)。
而接口正好相反,它是一种自上而下的设计思路。我们在编程的时候,一般都是先设计接口,再去考虑具体的实现。
- 抽象类和接口的适用场景,从顶至底顶需求定接口功能,从底至顶定物品,有各种特性的物品。可以举这么个例子:大爷遛鸟,大爷需要的首先是一只鸟,
鸟的共有属性和方法可以在抽象类中定义,至于是一只什么样颜色、叫声的鸟,可以在实现类中定义,只要这个实现类是鸟这个抽象类的实现类就可以了;
天上的热气球需要地面送一瓶水,这个需求需要的是一种具有飞翔特性的东西,我们只需要定义一个具有飞翔功能的接口就可以了,至于接口的实现类可以实鸟、无人机或者其他什么会飞的东西都无所谓,后期需求变为需要送水到月球了,我们接口的定义却不需要改变,只需要接口的实现类变为变为火箭、太空飞船或者超人就可以了。

多用组合少用继承
- 当抽象类被继承时无法确保子类拥有所有方法,例如鸟类的fly,分出多个抽象类又会使系统变得更复杂。
- 利用,接口,委托来解决。把鸟类拆分成flyable,egglayable等组合,但是又回有重复部分需要委托
- 委托给flyability统一定义fly的代码,减少重复代码
```java
public interface Flyable {
void fly();
}
public class FlyAbility implements Flyable {
@Override
public void fly() { //... }
}
//省略Tweetable/TweetAbility/EggLayable/EggLayAbility

public class Ostrich implements Tweetable, EggLayable {//鸵鸟
private TweetAbility tweetAbility = new TweetAbility(); //组合
private EggLayAbility eggLayAbility = new EggLayAbility(); //组合

//... 省略其他属性和方法...
@Override
public void tweet() {
tweetAbility.tweet(); // 委托
}

@Override
public void layEgg() {
eggLayAbility.layEgg(); // 委托
}
}
}
```
-

如何看待面向过程编程
1. 面向过程的编程语言不代表不能实现面向对象思想
2. 操作系统的复杂相对于业务系统的快速开发迭代是另一个维度复杂,基础系统更看重性能和稳定,而业务系统看重的是维护,复用,拓展。
3. 操作系统是要频繁跟硬件打交道的,“低级”的语言更快更简洁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值