面向对象方法学-第二节:面向对象的概念
Posted 快乐江湖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象方法学-第二节:面向对象的概念相关的知识,希望对你有一定的参考价值。
文章目录
一:对象(Object)
(1)对象的形象表示
下图形象地描绘了具有3个操作的对象。图9-1形象地描绘了具有3个操作的对象。面向对象方法学中的对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。对象可以作的操作表示它的动态行为
(2)对象的定义
按照面向对象程序设计的角度:对象是具有相同状态的一组操作的集合。 在应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西
按照结构化角度:对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以唯一地标识它的名字,而且向外界提供一组服务。对象中的数据表示对象的状态,一个对象的状态只能由该对象的操作来改变。每当需要改变对象的状态时,只能由其他对象向该对象发送消息。对象响应消息时,按照消息模式找出与之匹配的方法,并执行该方法
按照动态(对象的实现机制)角度:对象是一台自动机,具有内部状态S
(3)对象的特点
1.以数据为中心
操作围绕对其数据所需要做的处理来设置,不设置与这些数据无关的操作,而且操作的结果往往与当时所处的状态有关
2.对象是主动的
对象进行处理的主体。不能从外部直接加工它的私有数据,而是必须通过它的公有接口向对象发消息,请求它执行它的某个操作,处理它的私有数据
3.实现了数据封装
私有的数据完全被封装在内部,对外是隐藏的、不可见的,对私有数据的访问或处理只能通过公有的操作进行。为了使用对象内部的私有数据,只需知道数据的取值范围和可以对该数据施加的操作。一个对象类型也可以看作是一种抽象数据类型。
4.具有并行性
对象是描述其内部状态的数据及可以对这些数据施加的全部操作的集合。不同对象各自独立地处理自身的数据,彼此通过发消息传递信息完成通信。因此,本质上具有并行工作的属性。
5.模块独立性好
对象是由数据及可以对这些数据施加的操作所组成的统一体,而且对象是以数据为中心的,操作围绕对其数据所需做的处理来设置,没有无关的操作。因此,对象内部各种元素彼此结合得很紧密,内聚性相当强。它与外界的联系比较少,对象之间的耦合比较松
二:类
“类”是对具有相同数据和相同操作的一组相似对象的定义,即类是对具有相同属性和行为的一个或多个对象的描述,包括对怎样创建该类的新对象的说明。类是支持继承的抽象数据类型,而对象就是类的实例
- 类就是在定义一种类型,而对象是类实例化出来的。类相当于一个模板,对象是根据模板造出来的
class className
//成员函数
//成员变量
;//注意分号
三:实例
实例就是由某个特定的类所描述的一个具体的对象。类是对具有相同属性和行为的一组相似的对象的抽象,类在现实世界中并不能真正存在。实际上类是建立对象时使用的“样板”,按照这个样板所建立的一个个具体的对象,就是类的实际例子,通常称为实例
ClassName object1;
ClassName object1;
....
四:消息
消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。一个消息由接收消息的对象、消息选择符、零个或多个变元组成。
- 例如一个类中定义了某个打印函数,它要接受一个字符串,所以对象在执行时就会调用它,接着传入参数即可,这里的参数就是规格说明
五:方法
方法就是对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法
- 例如C++中类的成员函数就是方法
六:属性
属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值
七:封装
(1)定义
封装是把数据和实现操作的代码集中起来放在对象内部。封装也就是信息隐藏,通过封装对外界隐藏了对象的实现细节
(2)特点
- 有一个清晰的边界
- 有确定的接口
- 受保护的内部实现
八:继承
(1)定义
广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享父类中定义的数据和方法的机制
(2)特点
- 继承具有传递性
- 子类将会屏蔽父类的同名性质
(3)继承的优点(了解)
- 使得相似的对象可以共享程序代码和数据结构,大大减少程序中的冗余信息
- 便于软件维护和开发
- 用户在开发新系统时不需要从零开始,可以继承原有相似功能或者从类库中选取需要的类,然后再派生新类
九:多态性
(1)多态
多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。即在类等级的不同层次中可以共享一个方法的名字, 不同层次中的每个类各自按自己的需要来实现这个行为
比如经典的买票行为,学生和普通人都属于人,但是学生买票可以半价,而普通人则只能全票,但是他们买票的这个接口实现的原理肯定是一样的,只是策略不同
C++实现如下
#include <iostream>
using namespace std;
class Person
public:
void BuyTicket()
cout << "全价" << endl;
;
class Student : public Person
public:
void BuyTicket()
cout << "半价" << endl;
;
void fun(Person& p)
p.BuyTicket();
int main()
Person Job;
fun(Job);
Student Bob;
fun(Bob);
(2)优点
- 增加了面向对象软件系统的灵活性,进一步减少信息冗余
- 提高了可重用性和可扩充性
十:重载
函数重载:在同一作用域,若干个参数特征不同的函数可以使用相同的函数名
- C++可以有同名函数的原因就是支持函数重载
运算符重载:同一个运算符可以施加于不同类型的操作数上面
以上是关于面向对象方法学-第二节:面向对象的概念的主要内容,如果未能解决你的问题,请参考以下文章