240 likes | 427 Views
第 9 章 面向对象方法学引论. 程序设计方法的发展历程: —— 面向 过程 的程序设计方法. 程序的目的:用于数学计算 主要工作:设计求解问题的过程 缺点:对于庞大、复杂的程序难以开发和维护. 程序设计方法的发展历程: —— 面向 过程 的 结构化 程序设计方法. 设计思路 自顶向下、逐步求精。采用模块分解与功能抽象,自顶向下、分而治之。 程序结构: 按功能划分为若干个基本模块,形成一个树状结构。 各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成。 其模块化实现的具体方法是使用子程序。.
E N D
程序设计方法的发展历程:——面向过程的程序设计方法程序设计方法的发展历程:——面向过程的程序设计方法 • 程序的目的:用于数学计算 • 主要工作:设计求解问题的过程 • 缺点:对于庞大、复杂的程序难以开发和维护
程序设计方法的发展历程:——面向过程的结构化程序设计方法程序设计方法的发展历程:——面向过程的结构化程序设计方法 • 设计思路 • 自顶向下、逐步求精。采用模块分解与功能抽象,自顶向下、分而治之。 • 程序结构: • 按功能划分为若干个基本模块,形成一个树状结构。 • 各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成。 • 其模块化实现的具体方法是使用子程序。
程序设计方法的发展历程:——面向过程的结构化程序设计方法程序设计方法的发展历程:——面向过程的结构化程序设计方法 • 优点:有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。 • 缺点:可重用性差、数据安全性差、难以开发大型软件和图形界面的应用软件 • 把数据和处理数据的过程分离为相互独立的实体。 • 当数据结构改变时,所有相关的处理过程都要进行相应的修改。 • 每一种相对于老问题的新方法都要带来额外的开销。 • 图形用户界面的应用程序,很难用过程来描述和实现,开发和维护也都很困难。
程序设计方法的发展历程:——面向对象的方法程序设计方法的发展历程:——面向对象的方法 • 维特跟斯坦是本世纪乃至人类哲学史上最伟大的哲学家之一。 他生前只于1922年出版了一本著作——《逻辑哲学论》(Tractatus Logico-Philosophicus)。 在该书中,他阐述了一种世界观,或者说一种认识世界的观点,这种观点,在六七十年后的今天,终于由一种哲学思想沉淀到技术的层面上来,成为计算机业界的宠儿,这就是“OO”,Object-Oriented,面向对象。
程序设计方法的发展历程:——面向对象的方法程序设计方法的发展历程:——面向对象的方法 • 维特根斯坦在《逻辑哲学论》 一书中提出了如下思想: • 世界可以分解为事实 ( The world divides into facts.)事实是由原子事实 (atomic facts)组成的。 • 一个原子事实是多个对象(objects)的组合。 • 对象是简单的(基本的) The Object is simple。 • 对象形成了世界的基础。
程序设计方法的发展历程——面向对象的方法 • 将数据及对数据的操作方法封装在一起,作为一个相互依存、不可分离的整体——对象。 • 对同类型对象抽象出其共性,形成类。 • 类通过一个简单的外部接口,与外界发生关系。 • 对象与对象之间通过消息进行通讯。
程序设计方法的发展历程:——面向对象的方法程序设计方法的发展历程:——面向对象的方法 • 优点: • 程序模块间的关系更为简单,程序模块的独立性、数据的安全性就有了良好的保障。 • 通过继承与多态性,可以大大提高程序的可重用性,使得软件的开发和维护都更为方便。 • 面向对象技术不仅是一种程序设计方法,更重要的是,它是一种对真实世界的抽象思维方式。利用面向对象的信息建模概念,如实体、关系、属性等,同时运用封装、继承、多态等机制来构造模拟现实世界。非常适合问题域的分析和描述。因此,面向对象技术一出现就具有强大的生命力。
9.1 面向对象方法学概述 • 9.1.1面向对象方法学的要点 • 认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象可以由比较简单的对象以某种方式组合而成 • 把所有对象都划分成各种对象类,每个对象类都定义了一组数据和一组方法 • 按照子类与父类的关系,把若干个对象组成一个层次结构的系统。 • 对象彼此之间仅能通过消息相互联系。
面向对象方法学的优点 • 1. 与人类习惯的思维方法一致 • 2. 稳定性好 • 3. 可重用性好 • 4. 较易开发大型软件产品 • 5. 可维护性好
9.2面向对象的基本概念——对象 • 对象——引用领域中有意义的、与所要解决问题有关系的任何事物都可以视为对象。 • 对象具体表现为: • 物理实体 • 认为概念 • 任何有明确边界和意义的东西。例如,石头、树木、汽车、房屋等。
其他概念 1、类 • 分类——人类通常的思维方法 • 分类所依据的原则——抽象 • 忽略事物的非本质特征,只注意那些与当前目标有关的本质特征,从而找出事物的共性,把具有共同性质的事物划分为一类,得出一个抽象的概念。 • 例如,石头、树木、汽车、房屋等都是人们在长期的生产和生活实践中抽象出的概念。
2. 实例(instance) • 定义:某个特定的类所描述的一个具体对象。 • 含义:类是建立对象时使用的“样板”,按照这个样板所建立的一个个具体的对象就是类的实际例子,通常称为实例。
3. 消息(message) • 定义:要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。 • 构成: • 接收消息的对象 • 消息选择符(消息名) • 零个或多个变元
4. 方法(method) • 定义:对象所能执行的操作,即类中定义的服务。
5. 属性(attribute) • 类中定义的数据,是对客观世界实体所具有的性质的抽象。
6、封装(encapsulation) • 把对象的属性和服务结合成一个独立的系统单元。 • 尽可能隐蔽对象的内部细节。对外形成一个边界(或者说一道屏障),只保留有限的对外接口使之与外部发生联系。
7、继承(inheritance) • 继承对于软件复用有着重要意义,是面向对象技术能够提高软件开发效率的重要原因之一。 • 定义:特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。 • 例如:将轮船作为一个一般类,客轮便是一个特殊类。 • 图9.3实现继承机制的原理
8. 多态性(polymorphism) • 指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。 • 增加了面向对象软件系统的灵活性,减少了信息冗余,提高了软件的可重用性和可扩充性。
9. 重载(overloading) • 函数重载:在同一作用域的若干参数特征不同的函数可以使用相同的函数名 • 运算符重载:同一个运算符可以施加于不同类型的操作数上面。
内容 • 程序设计方法 • 类图的构成 • 数据库设计 • 一个例子