标签:contain 举例 pre ike 介绍 学生 move 出现 bsp
类A依赖于类B,用由类A指向类B的带箭头虚线表示
class Driver { public: dirve(Car car) { car.move(); } ...... }; class Car { public: void move() { ...... } }
class Customer { private: Product[] products; ...... }; class Product { private: Customer customer; ...... };
class Customer { private: Address address; ...... }; class Address { ...... };
以空心菱形加实线箭头表示
class Car { private: Engine engine; public: Car(Engine engine) { this->engine = engine; } void setEngine(Engine engine) { this->engine = engine; } ...... }; class Engine { ...... };
以实心菱形加实线箭头表示
class Head { private: Mouth *mouth; public: Head() { mouth = new Mouth(); } ...... }; class Mouth { ...... };
OOP编程思想中,继承是一个十分重要的内容。下面介绍几个 常见的容易混淆的术语。
首先举例子:
我们常见的动物,羊有很多种类,只是一种泛指,绵羊是其中一种,那么羊和绵羊的关系,就是is-a,即它们是继承的关系。
再如,羊身上都有羊毛,而不同种类的羊,羊毛生物形态也不同,比如绵羊和羚羊,前者羊毛丰富、蓬松、柔软,呈白色;后者羊毛稀少、刚硬,呈灰褐色。对于绵羊来说,羊毛和羊的关系就是has-a。对于羚羊也是同理。我们可以根据羊毛的不同,来区别羊的品种。
这种思想在OOP上,体现在哪方面呢?答案就是抽象类和接口的关系。
如下图:
图1 is-a与has-a之间的关系
可以看到 MyClass 继承自 A,它们是is-a关系。
MyClass实现了接口I,它们是has-a关系。
--------------------------------------------------------------------------
那么is-a和is-like-a啥关系呢?
同样,举例子,如图:
总结就是:
标签:contain 举例 pre ike 介绍 学生 move 出现 bsp
原文地址:https://www.cnblogs.com/stu-jyj3621/p/12706785.html