面向对象的基本概念

仅供学习参考,如有不足之处,请予指正。


面向对象 = 对象(Object)+ 分类(Classification)+ 继承(Inheritance)+消息通信

1、类和对象

一个类定义了一组大体上相似的对象;包含一组对象的共同行为和属性;类时在对象之上的抽象,对象是类的具体化,是类的实例

类分为:实体类、接口类(边界类)、控制类

实体类:表示现实世界真实的实体,如人、物等

接口类(边界类):对象为用户提供一种与系统合作交互的方式,分为人和系统两大类,其中人的接口可以是显示屏、窗口、web窗口、对话框、菜单、列表框、其他显示控制、条形码、二维码或者用户与系统交互的其他方法;系统接口涉及把数据发送到其他系统,或者从其他系统接受数据

控制类:对象用来控制活动流,充当协调者

一般类和特殊类:特殊类是一般类的子类,如“汽车”、“轮船”、“飞机”都是一种“交通工具”;“轿车”、“货车”是一种“汽车”


对象是基本的运行实体,包括数据(属性)、作用于数据的操作(行为)

每个实体都是对象

2、消息

对象之间进行通信的一种构造

消息传递:对象——发送消息(执行某些活动的信息)——接收的对象不需要经过解释,然后予以响应

3、继承

父类和子类之间共享数据和方法的机制

一个父类有多个子类,子类是父类的特例

单重继承:子类B只从一个父类A得到继承

多重继承:一个子类有两个或更多个父类

4、多态

不同对象收到同一消息可以产生完全不同的结果

通用的:参数的、包含的

特定的:过载的、强制的

5、动态绑定

在程序运行时进行的,一个对象发送消息请求服务时,要根据接收对象的具体情况将请求操作与实现的方法进行连接

6、面向对象分析(OOA)

目的:为了获得对应问题的解决

五个活动:认定对象、组织对象、描述对象间的相互作用、确定对象的操作、定义对象的内部信息

认定对象:按自然存在的实体确定对象

组织对象:将相关对象抽象成类

对象间的相互作用:一个对象是另一个对象的一部分、一个对象与其他对象间的通信关系等,由一个对象解释另一个对象以及一个对象如何生成另一个对象

基于对象的操作:将几个对象的信息连接起来

7、面向对象设计(OOD)

将OOA创建的分析模型转换为设计模型,定义系统构造蓝图

遵循抽象、信息隐蔽、功能独立、模块化等设计准则

活动:识别类和对象、定义属性、定义服务、识别关系、识别包

原则:单一责任原则、开放-封闭原则、里氏替换原则、依赖倒置原则、接口分离原则、共同封闭原则、共同重用原则、无环依赖原则、稳定依赖原则、稳定抽象原则

单一责任原则(SRP):就一个类而言,应该仅有一个引起它变化的原因;当需要修改某一个类的时候原因有且只有一个,让一个类只做一种类型责任

开放-封闭原则(OCP):软件实体(类、模块、函数等)应该是可以扩展的,即开放;但是不可修改,即封闭

里氏替换原则(LSP):子类型必须替换掉他们的基类型

依赖倒置原则(DIP):抽象不应该依赖于细节,细节依赖于抽象

接口分离原则(ISP):不应该强迫客户依赖于它们不用的方法;接口属于客户,不属于它所在的类层次结构:即依赖于抽象,不依赖于具体

共同封闭原则(CCP):包中的所有类对于同一类性质的变化应该是共同封闭的;一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响

共同重用原则(CRP):一个包中的所有类应该是共同重用的;如果重用了包中的一个类,那么就要重用包中所有类

无环依赖原则(ADP):在包依赖关系图中不允许存在环,即包之间的结构必须是一个直接的五环图形

稳定依赖原则(SDP):朝着稳定的方向进行依赖

稳定抽象原则(SAP):包的抽象程度应该和其稳定程序一致

8、面向对象程序设计(OOP)

class Employee{
private://私有
   char * Name;
   int age;
public:
    void Change(char *name, int age);
    Employee(char *name, int age);//构造函数
    ~Employee();//析构函数 
};

继承和类的层次结构

class Manager:public Employee{
    int level;
public:
    void ChangeLevel(int n);
    Manage(char *name, int age, int level);
    ~Manage();
};

对象、消息传递和方法

Manage ml;
ml.ChangeLevel(2);

对象自身引用

Manage::ChangeLevel(2);

重置:在子类中重新定义父类中已经定义的方法,通过虚函数的定义来重置声明实现动态绑定 ,多态机制

class Employee{
protected:
    char *name;
    int age;
public:
    void Change(char *name, int age);
    //虚函数
    virtual void Retire();
    Employee(char *name, int age);
    ~Employee();
};

class Manage:public Employee{
    int level;
public:
    void Retire();//重置从父类那继承的Retire方法
    virtual void ChangeLevel(int n);//虚函数,供Manage的子类重置
    Manage(char *name, int age, int level);
    ~Manage();    
};

类属类:参数多态机制,类属template,类的模板

template <class T> class Vector{
    T *v;
    int sz;
public:
    T&operator[](int i);//运算符过载
    Vector(int VectorSize);
    /*...*/
};

<class T>中的class用来说明T是一个类型参数,但并不意味着T一定是一个类,也可以是基本类型

无实例的类,相当于接口

class Person{

protected:
    char *name;
    int age;
/*...*/

public:
    void Change(char *name, int age);
    virtual void PrintOn() = 0;//纯虚函数,接口   
    Person();
    Person(char *name, int age, char *addr, char *tele);//过载的构造函数
};

9、面向对象测试

四个层次:

算法层——测试类中定义的内阁方法,单元测试

类层——测试封装在同一个类中的所有方法与属性之间的相互作用,模块测试

模板层——测试一组协调工作的类之间的相互作用,集成测试

系统层——把各个子系统组装成完整的面向对象软件系统,在组装过程中同时进行测试

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值