1.什么是面向对象的思考方式?
[1]在对世界/系统 进行 观察/建模的时候,把它们看成是由一系列相互交流、互为影响的对象集(a set of objects);
即,1)世界是由相互作用的对象组成的;2)描述与构建由对象组成的系统(对象是怎么工作的?);
“软件系统是由多个对象组成的,对象间通过信息相互交流、共同协作,以完成整个系统的功能”;
[2]面向对象的思考方式适合解决不确定的事件、创新性的事件;如,篮球场上的每个队员的位置;
面向过程的思考方式适合解决已知的事实、重要条件都已知的场景;如,生产线上的每个产品的位置;
[3]面向对象的核心基本特征是构成面向对象思想的基本元素,包括:
Object/class;
Method/Message;
Encapsulation; 封装与接口通信,封装与对象解耦,封装与访问权限;
Inheritance;继承,is a;继承与抽象;
Interface/Implement; 接口与类,接口与对象解耦;
Polymorphism; 多态与继承,多态与指针;
Composition/Aggregation; 组合/聚合,has a;强调整体控制部分/传递性和不对称性;
Abstraction;抽象与发现类,抽象与扩展性,抽象与可移植性;
注:多态与继承的例子:
1 public abstract class Shape{ 2 private double area; 3 public abstract double getArea(); 4 }
public class Circle extends Shape{ double radius; public Circle(double r){ radius = r; } public double getArea(){ area = 3.14*(radius*radius); return(area); } }
public class Rectangle extends Shape{ double length; double width; public Rectanfle(double l, double w){ length = l; width = w; } public double getArea(){ area = length*width; return (area); } }
1 Circle circle = new Circle(5); 2 Rectangle rectangle = new Rectangle(4,5); 3 stack.push(circle); 4 stack.push(rectangle); 5 6 while(!stack.empty()){ 7 Shape shape = (Shape)stack.pop(); 8 System.out.println("Area = "+ shape.getArea()); 9 }
注:接口与实现的例子;
TV是用户、插座是接口、发电厂是实现;
虚线箭头表示依赖关系,虚线三角表示实现关系;