那么在 OOD 模型的基础上,我们要选择相应的这样的一个语言来实现
OOD 的模型 我们一般情况下希望的是,你选择的语言要
考虑这个小组,对吧,学习的成本,进度和效率 那么还有就是说面向对象的编程语言,肯定是作为实现
OOD 的理想的语言 那么另一点呢,有的同学说如果我
对 C++ 不是特别熟,但是我对C语言很熟,那你在已经掌握了 O
的这个思想的基础上也可以采用 这个 C 语言来实现 OOD
模型,当然你需要来去 做一些这个相应的变通来保持一些
OO 的这样的一些风格 所以这个呢就可能我们需要的是更灵活的这样的一个运用啊,OO
的这样的一些概念 那我们来看一下编程
语言的评价,也就是看这种编程语言到底对于面向对象支持的好与不好
要看它能否提供类和对象,能否提供封装机制 包括对于封装有无可见性控制,对
大家知道说如果纯面向对象的这种编程语言和这种混合的编程语言 对于这种封装实际上是不一样的啊,那么纯面向对象语言
相当于可能是实现了这种严格的封装,那么混合的面向对象的编程语言 是形成了这种什么?灵活的封装,可能提供了不同的可见性的控制
所以这些就是你可能考虑的一个方面,另一个是否实现一般特殊结构,对吧,对于继承 多继承,很多语言不支持。
那么对于单继承,大多数的面向对象的语言都支持 那么当然目前来说有的语言相当于也支持了这种多继承,所以在
这里面就要考虑,你的 OOD 的设计里面继承多不多,对吧? 所以你来选择这样一个语言支持的时候要考虑它,还有一点就是说
支持多继承的时候,你要来考虑能否解决命名冲突,命名冲突大家很容易理解,对吧,这是举- 的一个例子
比如说职员学员跟在职的学员之间相当于它们之间是一个继承,对吧?
那在这里面,职员里面有一个专业,学员里有一个专业,到这个里面我要 继承了,我要继承这里面所有的属性和操作,那这两个专业我都需要继承下来
如果我到这个里面都是这样一个简单的继承,就 容易引起什么,无法辨认,到底继承下来的这个两个专业到底是
属于哪一个专业上面的,所以这个就是命名冲突 那么对于命名冲突呢,不同的语言有不同的这样的一个解决方案,所以我们也要考虑
它编程语言是否能解决命名冲突,包括能否支持多态 所以这个是我们评价这个语言的是否,这个
功能强大的一个非常好的,就是非常基本的一个着眼点。
还有一个 如何能实现整体部分的结构?就是说用什么实现?包括多重性的这样的一些表示
还有属性和操作的这样的一个实现机制,包括这里面我提出来的,对吧
能否支持动态绑定?因为我觉得面向对象这个里面相当于概念很多
动态绑定什么含义?我们来看一下 那么绑定一提到这个词,实际上指
的是一个对象和事物与某种属性建立某种联系的这个过程 那么计算机语言中有两种绑定:一种是静态绑定,一种是动态绑定啊
大家可能就有同学说,老师我已经会了,因为不排除我们这个课程 有些学生整个可能对于一些概念不是很清晰,所以需要剖析一下
那么静态绑定,实际上是在 就是说程序执行之前,它是发生在编译期的时候,对吧,就是说
这个时候相当于是来进行的这样的一些绑定,那么动态绑定是在运行期间
产生的这样的一个访问请求,那么用运行时的这样的
信息来进行相应的绑定,所以这个过程两者之间是有本质的这样的一些区别的
那么还有我们要来看
如何来实现关联?还有消息通讯,所谓的消息通讯就相当于是
一个类与另一类之间操作之间的什么?依赖关系,也就是 消息的这样的一个请求和这个服务的这样的一个关系,那么还有
其他的一些考虑的因素,比如说是不是带可视化的编程环境,对吧 可视化的编程环境这肯定是最好的,对吧。
我们希望能够采用这样的编程语言 那么是否带有泪库,包括能否支持对象的永久存储,等等
那我们来看一下,典型的面向对象的 编程语言我们本节课讲给大家介绍一下 C++,small
talk 包括 java 的 C++,这个
是由贝尔公司啊,整个相当于贝尔实验室来开发的 那么它是在
C 语言的基础上扩展了 OO 特征而得到的 那在这里面我们来看一下,就是它保存了C语言的高效性和一致性
同时呢相当于它也加入了一些,面向对象的一些概念的这样的一些支持 它采用了强类型的支持机制,同时
实现动态绑定,所以目前来说 这个 C++ 是应用最广泛的一种面向对象的编程语言。
我们来看一下 那么对于类和对象而言,对吧,C++
里面有对它的这样的一个基本的支持,比如说 class,object,封装是有的,可见性的控制也分成了这么几点
那么对象的创建和删除也相应的提出了相应的这样的一些
构造函数和析构函数来支持,那么同时对于静态对象 可以创建和删除,是这样来做的。
那么动态对象呢 它可以通过这个对象指针这样来动态的创建这个对象
包括删除这个对象指针来删除对象 那么一般特殊结构也就是说对于继承关系
支持的是单继承和多继承,所以大家看 C++
之所以 能够这么火,是因为它对于面向对象的这个基本的一些机制,支持的非常好
同时它用命名空间能够解决什么?命名冲突 对于多肽和重载它也支持
同时呢相当于在继承的同时可以呢 定义被继承内容的可见性,所以大家看还是非常灵活的
那么对于聚合关系,它也用指针和嵌套对象等等 实现了良好的聚合关系的支持,属性
被称为成员变量,操作呢,是称为成员函数 那么对于关联和消息呢,相当于它也有相应的这样的一个支持机制啊
所以这就是一个基本的面向对象的分析与设计中,相当于 C++
的这样的一个对应 那么 Java 语言,大家知道它是一种纯面向对象
语言,那么它与 C++ 基本上一致,大家说它最大的特点是什么?
去掉了 C++ 里的非面向对象的成分,所以在这里面它不使用指针
同时它是解释执行,那么同时Java 语言提供了语言级的多线程啊
同步语言与并发控制机制,所以对于我们说的什么? 这个后面的控制驱动部分,等等那一部分的一些支持还是非常好的 那在
Java 语言里面,它对于类和对象有相应的这样一个表示,对吧? 比如说类,class 啊,封装是有的。
包括对象的创建和删除,它都 提供了相应的构造和析构函数相当于来去支持。
那么属性和操作 也有相应的这样的一些表示,比如说实例变量,类变量
它也分别给出了相应的表示,那么可见性呢给出了四种的这样的一个 分类。
那么操作也分为实例,方法和类方法 那么可见性相当于也是被分为这四种形式
那么继承它支持了这种继承,同时 重载和多肽呢,它也支持,包括关联和聚合关系
它也都是用对象引用的方式来去实现的,因为这里面已经不只是指针了,对吧。
所以 这里面它是用对象引用来实现关联和聚合的
那么还有非面向对象的这种编程语言,我们来介绍 C
语言来看一下 那么 C 语言里面没有类和对象的这样的一个概念,它可以用结构定义对象,大家看啊,可以曲线救国
可以通过指针来说明,应该有哪些函数,但是它不是封装的这样一个概念,不是像对象的那种- 严格的封装
那么 C 语言里面一般特殊结构是没有的
但是它可以把一般结构嵌入到特殊结构里面 这个映射成一个什么?这样一般特殊结构
那么同时整体部分的这样的一个关系呢,它可以通过指针嵌套的结构去来支持
属性和操作它分别对应着变量和函数 那么关联呢,它可以用指针,面向
对象里的消息的这样的一个调用,它可以用函数调用起来表示 这是 C
语言对于这个面向对象的概念的这样的一个支持程度