面向对象编程(Object Oriented Programming) OOP
面向对象编程语言(Object Oriented Programming Language)OOPL
面向对象编程一般是使用面向对象编程语言实现,但是不使用面向对象编程语言照样可以实现面向对象编程。即使是面向对象编程语言写的代码可能也是 面向过程风格的代码
做什么---面向对象分析
怎么做---面向对象设计
封装
Java 通过 访问权限(public ,private等)来实现封装,如果对类中的属性不做限制,那任何代码都可以访问、修改类中的属性,这对于开发者来说是不可控的,你的代码可能在项目中被不同的代码调用,属性可以被随意修改意味着任何调用者的代码都可以修改,这会影响代码的可读性和可维护性,可以类比于我们的笔记本电脑,厂家通过一个壳子只给我们留下了键盘、鼠标、显示屏等外设,这极大的降低了我们使用电脑的难易度,如果厂家(开发者)将电脑的全部细节都暴露给我们(调用者),一会增加我们的使用难度,二会降低电脑的质量(随时都会因为我们的修改让电脑毁坏,毕竟不是每个人都很熟悉电脑的专业知识,类似不是每个员工都对项目的业务很熟悉,封装可以有效避免新员工(业务不熟)胡乱修改)
继承
继承表示 is-a关系,比如 “猫 --是--哺乳动物”,“麻雀--是--会飞的”,最大的好处是代码复用,将两个类共同的部分抽取到父类中,即抽取共性类,过度使用继承会导致继承层次复杂,代码的可读性可维护性变差,子类与父类高度耦合,修改父类代码会直接影响到子类,所以有多用组合少用继承的设计思想
多态
多态是指在程序运行过程中,子类可以替换父类,多态实现的几种方式包括
接口类语法:
public interface Iterator{
String hasNext();
String next();
String remove();
}
public class Array implements Iterator{
private String[] data;
public String hasNext(){...}
public String next(){...}
public String remove(){...}
}
public class LinkedList implements Iterator{
private LinkedListNode head;
public String hasNext(){...}
public String next(){...}
public String remove(){...}
}
public class Demo{
private static void print(Iterator iterator){
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
public static void main(String...args){
Iterator arrayIterator=new Array();
Iterator linkedListIterator=new LinkedList();
print(arrayIterator);
print(linkedListIterator)
}
}
duck-typing语法:
Logger 和 DB 两个类没有任何关系,只要他们都定义了record方法就可以传到test方法中执行对应的record方法(这是一些动态语言特有的语法机制)
class Logger:
def record(self):
print("i write a log")
class DB:
def record(self):
print("i insert a record")
def test(recorder):
recorder.record()
def demo():
logger=Logger()
db=DB()
test(logger)
test(db)
多态特性能提高代码的可扩展性和复用性,一个test方法可以应用到Logger 和 DB 两个类上,一个print方法,可以打印Array 和 LinkedList 集合的数据,同时多态也是很多设计模式的实现基础
抽象
封装主要指的是如何隐藏信息,保护数据(类的属性),而抽象讲的是如何隐藏方法的具体实现,让调用者只关心方法提供了哪些功能,而并不需要知道是怎么实现的。抽象是一个宽泛的设计思想,是人类处理问题时候的一种手段,是一种从上而下的解决问题的思路,抛弃细节,站在森林之外去选择要哪棵树,也叫大局观或者宏观。课程中有一个例子,获取图片的方法,getAliyunPictureUrl() 就不是一个具有抽象思维的命名,因为如果图片不存在阿里云服务器上了,命名也要随之修改
原文:https://www.cnblogs.com/roadzhao/p/12291211.html