面向对象程序设计方法学

面向对象程序设计方法学

面向对象程序设计吸取了结构化程序设计的一切优点,又考虑了现实世界与面向对象解空间的映射关系,它所追求的目标是将现实世界问题的求解尽可能的简单化。

 面向对象程序设计将数据及对数据的操作放在一起,作为一个相互依存、不可分割的整体来处理,它采用数据抽象和信息隐藏技术。它将对象及对对象的操作抽象成一种新的数据类型—类,并且考虑不同对象之间的联系和对象类的重用性。

下面我将就本人了解的一些面向对象基本概念和大家分享。希望对大家有所帮助。



一、对象的基本概念

面向对象=对象+类+继承+消息通信

面向对象系统最突出的特性就是封装性、继承性和多态性,衡量某一种程序设计语言,看它是否是面向对象的程序设计语言,主要看它是否具有以上三种特性。 像C++,C#,java等都是这样的程序设计语言。


二、类与对象

类(class)是对具有相同属性和服务的一个或一组对象的抽象定义。

类与对象是抽象与具体实例的关系,一个具体的对象被称做类的一个实例。

是否建立了丰富的类库是衡量一个面向对象程序设计语言成熟与否的一个重要标志。

对象(object)是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,是类的实例。

面向对象的软件系统是由对象组成的,复杂的对象是由比较简单的对象组合而成。也就是说,面向对象方法学使用对象分解取代了传统方法的功能分解。

对象的属性和方法称为这个对象的“成员”。它是构成对象的主要部分。

类可以说是对象的蓝图(blueprint)



三、对象三要素

      对象三要素:对象标志、属性和服务

对象标志:也就是对象的名字,供系统内部唯一地识别对象。

属性:也称状态或数据,用来描述对象的静态特征。在某些面向对象的程序设计语言中,属性通常被称为成员变量或简称变量。

服务:也称操作、行为或方法等,用来描述对象的动态特征。某些面向对象程序设计语言中,服务通常被称为成员函数或简称函数。

封装:对象的一个重要原则,目 的是使对象的定义与实现分离。它有两层含义:第一,对象是其全部属性和全部服务紧密结合而形成的一个不可分割的整体;第二,对象是一个不透明的黑盒子,表 示对象状态的数据和实现操作的代码都被封装在黑盒子里面。使用一个对象的时候,只需知道它向外界提供的接口形式,无须知道它的数据结构细节和实现操作的算 法。从外面看不见,更不可能从外面直接修改对象的私有属性。

l          处于私有段(private)的changemark,这是不向外公开的功能,只供对象自己使用。

l          处于保护段(protected)的getmark,这是只向外界宣布的功能,只对其派生类对象提供服务。

l          处于公有段(public)的getname和getmajor,这是向所有外界公开的功能,它可以响应外界对象的请求。



   四、继承(inheritance)和多态(polymorphism)性  

继承:是面向对象程序设计语言不同于其它语言的主要特点,是类之间共享属性和操作的机制。其定义为:特殊类(或称子类、派生类)的对象拥有其一般类(或称父类、基类)的全部属性与服务,称做特殊类对一般类的继承(分为单继承和多继承)。在面向对象的方法学中,继承是提高软件开发效率的重要原因之一。

多态性:指对象在收到消息时,要给予相应,对象收到同一个消息后可能产生完全不同的结果。

总体上分为:编译时的多态和运行时的多态。

参数多态(使用函数重载来实现)是应用最广泛的多态,是最纯的多态。

多态性不仅增加了面向对象软件系统的灵活性,进一步减少了信息冗余,而且显著提高了软件的可重用性和可扩充性。

在定义函数重载时,函数名字相同,但函数所带的参数的个数或类型必须有所区别,否则就会出现二义性。

习惯称被继承的类为“父类”,而继承的类称为“子类”。

在面向对象系统中除了函数可以重载外,运算符也可以重载。java也是这样。

注意:编译时的多态一般由函数重载来实现,而运行时的多态由虚函数来使用。

时间: 2024-10-31 04:33:50

面向对象程序设计方法学的相关文章

ATM系统 第一个面向对象程序

该程序主要是模仿ATM机的过程主要是为了练习面向对象 主要有三个类 ATM和 Bank和 Account 类 先粘贴代码如下 ATM 1 package com.hpu.bai; 2 import java.util.Scanner; 3 public class ATM { 4 Bank bank = Bank.getBank(); 5 Scanner input = new Scanner(System.in); 6 Account nowAcc ; 7 private boolean an

js面向对象程序设置——创建对象

<script type="text/javascript">            //工厂方式        //1.原始方式        /* var objCar=new Object();        objCar.name="劳斯莱斯";        objCar.color="blue";        objCar.showColor = function() {          alert(this.colo

面向对象程序中的常量

一.常数据成员 使用constkeyword进行说明的数据成员,称为常数据成员.其作用和使用方法与一般常变量(const变量)相似,但常数据成员的值是不能改变的. 注意:仅仅能通过构造函数的參数初始化表对常数据成员进行初始化,不能採用在构造函数中对常数据成员赋初值的方法. 比如: 如在类体中定义了常数据成员age: const int age;    //声明age为常数据成员 在类外定义构造函数,应写成下面形式: CStudent∷Cstudent(int a):age (a){--}//通过

独立完成的第一个c++面向对象程序(虽然很简单&#160;以后会增加功能)

一个简单的商品展示程序 功能如下: 1.输出一张商品表(嘻嘻 就这一个功能) 代码如下: #include<iostream> #include<string> using namespace std; class Goods { private: int amount; double price; string name; public: Goods(); int AddAmount(int); int LoseAmount(int); int SetGoods(int,doub

面向对象程序的设计模式

设计模式很难定义,通俗来说,就像是写作文的套路.程序员在程序设计总结了很多开发经验,就形成了设计模式. 基本思想:1.将变化的和不变的部分分开,在修改和维护时只需要改动变化的部分. 具体方式: 1.类继承是oop中的三大特点之一,可以实现代码复用,并且代码层次更清晰,但是继承会使类的耦合度变高,简单来说,一个类的改动可能会影响其他类,使代码的修改和维护变得困难.灵活性可以使用接口设计,通过继承接口,实现不同的行为,可以看到,代码的复用性降低了,于是又引入了在接口中的适配器.实现代码复用的其他方式

测验8: 程序设计方法学 (第8周)-单选题

1. 自顶向下设计主要由下列哪个语法元素实现????????????????????????????????????????????????????????????????????????????????? A.函数 B.对象 C.循环结构 D.过程 解析:函数是自顶向下设计的关键元素,通过定义函数及其参数逐层开展程序设计. 2.关于计算思维,以下选项描述正确的是:??????????????????????????????????????????????????????????????????

测验8: 程序设计方法学 (第8周)-程序题

题1:英文字符的鲁棒输入 描述 获得用户的任何可能输入,将其中的英文字符进行打印输出,程序不出现错误.???????????????????????????????????????????????????????????????????????????????????????????????? 输入输出示例   输入 输出 示例 1 *&^123abc0e abce 答案: alpha = [] for i in range(26): alpha.append(chr(ord('a') + i)

python第八周,程序设计方法学

实例:体育竞技分析 计算思维:抽象+自动化 模拟:抽象比赛过程+自动化执行n场比赛 当N越大时,比赛结果分析会越科学 解决复杂问题的有效方法: (自定向下设计)将一个总问题表达为若干个小问题组成的形式,使用同样方法进一步分解小问题,直至小问题可以用计算机简单明了的解决.分而治之 (自顶向上执行)分单元测试,逐步组装,按照自顶向下相反的路径操作,直至系统各部分以组装的思路都经过测试和验证 模块化集成 自顶向下是"系统"思维的简化 #MatchAnalysis.py #比赛规则,双人击球比

js面向对象程序设置——继承机制

//继承        //1.对象冒充            /*     function ClassA(sColor) {            this.color = sColor;            this.sayColor = function () {                alert(this.color);            };        }                function ClassB(sColor, sName) {