日期:2012-07-01  浏览次数:20728 次

主题: 对象(Object)基本概念

???????????? 内容 ????????????
v 1. 何谓「对象导向」?
v 2. 认识与寻找对象
v 3. 对象之分类与组织
v 4. 类别之设计
v 5. 对象之行为
v 6. 讯息与运算
v 7. 类别之定义
v 8. 着手写 VB程序

大地运转、花开花谢、及枫叶飘零 ...... 是自然界对象之行为。对象行为交互作用﹐造成多采多姿的大自然。软件的对象是自然界对象的抽象表示,软件就逼真地表达自然界的实际景象﹐于是人们心中构思的软件和眼中所见到的世界是一致的。软件是自然界实况的抽象﹗简单明了﹐能帮助人们了解和掌握真实景物。本文介绍VB的对象观念,让您轻易以VB描述身边美丽多变的世界。 ----- 摘自 高焕堂 的文章

1. 何谓「对象导向」﹖

在企业上常有「行销导向」及「技术导向」之名词﹐行销导向讲得更通俗一点就是行销挂帅﹐亦即行销观念为整个企业营运计划之核心。而技术挂帅就是以技术创新为公司活动之核心。同样地﹐在软件开发方面﹐传统 C语言之核心观念是「函数」(Function)﹐进而让函数之间可互相呼叫并传递数据。在 COBOL程序中﹐大部分的程序设计工作摆在 COBOL程序的程序部(Procedure Division)中﹐进而让段(Paragraph) 之间互相呼叫(Perform) 。当您看到 C程序时﹐脑海里充满着函数的影子﹔当您想到 COBOL程序时﹐心理也充满段、节等观念﹐就像我们想到或看到万里长城时﹐马上联想到它是由许多石块所构成一般。因之﹐传统的程序设计是「函数导向」(Function-Oriented) 或称为「程序导向」(Procedure-Oriented)﹐着重于计算机处理资料时的执行过程。
后来﹐资料导向观念出现了﹐资料在经过程序的处理后会有所改变﹐这转变的途径﹐成为软件设计过程中﹐注意力的集中点﹐这称为「数据导向」(Data-Oriented) 。
现在的「对象导向」(Object-Oriented) 观念﹐在软件开发时﹐甚至写程序时﹐对象(Object)成为脑海里的主角。当您看到程序时﹐心理充满着对象之影子和概念﹐函数和资料变成对象内之一部分﹐是配角而非主角了。程序设计之核心工作在于描述对象、组织对象、安排对象间之沟通(传递讯息)方式。就如同「人」是社会中的主要对象﹐社会是有组织的人群﹐人们之间会互相沟通、协调。
由于软件中的对象观念和实际社会中的对象观念是一致的﹐所以 OOP观念使软件与实际世界间之距离缩短了。此为 OOP技术的重要特点之一。例如﹕函数或程序导向之核心观念──函数﹐在一般人们的心目中﹐并非熟悉之概念﹐只在数学里学到之概念而已。因而让人对软件感到陌生。而在对象导向观念中﹐实际社会之对象﹐例如﹕人、汽车、股票、磁盘驱动器、帐单、房间、学生、教室等皆为软件设计师脑海中的对象﹐也是程序中的对象。因之﹐不论是老板或程序设计师来看程序﹐他们脑海中皆充满对象之影子﹐而这些个体皆为人们生活中﹐真正活生生的东西、实在之物体或大家耳熟能详之概念﹐使得软件之使用者和设计者有一致的心灵、共同之感觉﹐这让使用者对软件更满意﹐设计师更了解使用者之需要。


2. 认识与寻找对象
着手设计一个系统或写一个程序时﹐第一件会出现在脑海中的问题是﹕对象那么多﹐何者是跟此系统或程序有关的呢﹖例如﹕在设计一个销售系统时﹐「顾客」是一重要对象﹐产品及订单也是重要对象﹔至于原料之产地及原料之供货商虽然是明显的对象﹐但不见得与销售系统有关。反之﹐若您所设计的是采购或生产系统时﹐原料、产地及其供货商就跃然成为重要对象了。在寻找对象之过程中也会让您对所要设计的系统有更清楚之认识。
现在就来介绍较实用之找对象方法。其中最常见的是﹐从有关文件着手。在文件里会发现下述线索﹐再进而找出对象。
(1) 人(People)──人是任何系统之重要角色﹐通常是最容易找到之对象。例如﹕公司有 5位销售员﹐各负责一个地区的任务﹐并与该区的顾客连络。从这段叙述中﹐就可发现两种对象──销售员及顾客﹐每一位销售员皆是对象﹔同样地﹐每一个顾客皆是对象。
(2) 地方(Sites) ──地点是很容易发现之对象。例如﹕您从订单上看到产品将送达之目的地、顾客之所在地。再拿旅行社行程来当例子﹐各旅行团将于不同之观光地区停留﹐各观光地点皆是对象。
(3) 事物(Things)──在可摸到或看到的实物中﹐也容易找到与系统有关之对象﹐例如﹕产品是销售系统及生产系统之明显对象﹐原料项目是生产及库存系统之重要对象。就旅馆管理系统而言﹐「房间」是重要对象。「书本」及「杂志」为图书馆或书店管理系统之明显对象。
(4) 事件(Events)──在企业界最常见之事件是「交易」﹐当事件发生时﹐我们会去记录它发生的时刻、有关金额等等。这种我们所关心的事件也常是重要之对象。值得注意的是﹐这些事件是已发生的﹐其为一项行为或动作。所以在文件中﹐常是一个句子的动词。例如﹕今天共有 3种原料已降至安全存量之下﹐所以共订购 3种原料。这每一「订购」(Ordering)事件皆是对象。就飞机场的控制系统而言﹐每次飞机「起飞」或「降落」 皆是重要对象。而「提款」及「转帐」皆为银行系统之重要对象。「挂号」及「就诊」为医疗系统之对象。
(5) 概念(Concepts)──与企业营运或机构管理有关之「构想」或各种「计划」或其它观念﹔这些无形的﹐但决定企业活动之构想﹐常是重要对象。例如﹕公司正拟定三种广告策略﹐其中每一策略就是企业行销系统之重要对象。这公司正透过 2种管道与社区居民沟通﹐这管道也是概念性之对象。
(6) 外部系统或设备(External Systems or Devices) ── 软件系统常会与其它系统沟通﹐互相交换信息。有时也由外部设备取得交易资料或把处理结果送往外部设备。这些外部系统或设备也是对象。例如﹕库存系统与采购系统会互相沟通﹐对库存系统而言﹐采购系统是对象﹔反之﹐对采购系统而言﹐库存系统则为对象。如果收款机直接把交易资料传送给销售系统﹐则收款机是此销售系统之对象。如果股票系统直接把资料传送到交易市场的电视显示屏上﹐则对股票系统而言﹐电视显示屏是对象。
(7) 组织单位(Organization Units)──企业机构之部门或单位。例如﹕在学校管理系统中﹐教务处及训导处等单位皆是对象。
(8) 结构(Structures)──有些对象会包含其它对象。所以在对象中常能找到其它对象。例如﹕在学校的组织单位──教务处﹐含有小对象如注册组及学籍股等。在汽车对象中可找到引擎、轮胎及座椅等对象。在「房屋」对象中﹐会发现到厨房、客厅、沙发等对象。

以上介绍的是常用之寻找对象方法﹐会寻找对象之后﹐就必需将对象分门别类﹐并且了解类别间之关系﹐以便把它们组织起来。例如﹐在公司的人事结构中﹐可发现人因扮演角色之不同而分为不同种类之对象﹐如推销员、司机、经理等等。汽车可分为跑车、巴士、旅行车等不同种类之对象。如何分类(Classification)﹐是OOP 之重要观念。


3. 对象之分类与组织
3.1 类别的永恒性
俗语说﹕物与类聚。「物」和「类」说明对象与其所属「类别」(Class) 之关系﹐相似之对象常归为一类。例如﹕一个人是对象﹐人类是由个人所构成之类别。「狗」这种动物是类别﹐我家那只哈巴狗是对象。当您获知公司有 A、B 两位推销员时﹐可得知 A、B 两者皆为对象﹔同时﹐也联想到「推销员」(Salesman)是类别﹐而 A、B 皆是此类别内之对象。
由于类别比对象较具有永恒性﹐在设计软件的过程中﹐当您找到对象时﹐也必须掌握此对象之类别﹐如此软件自然会更具有永恒性﹐亦即软件的寿命会更长。例如﹐一个人从出生到老﹐不超过二百年﹐而「人类」则因对象生生不息而永远昌隆。在学校里﹐King老师会换工作而离开学校﹐但「老师」类别将永远存在。因之﹐个体及其所属的群体──类别﹐皆是 OOP之核心观念。善于利用类别把对象归类﹐并且组织起来﹐是对象导向软件开发的重要技术。在设计软件时﹐通常必须先决定有关的类别﹐并且弄清楚类别之间的关系。兹介绍两种最常见之类别关系﹕「父子关系」和「整体╱部分关系」。

3.2 父子类别关系
人们从小就学习对东西分类﹐将东西分为「生物」及「无生物」﹐其中生物又分为「动物」及「植物」等。无论动物、植物或生物皆为类别(Class) 。动物是一种(a kind of) 生物﹐植物也是一种生物。此时﹐即称动物是生物的子类别(Subclass)﹐植物也是生物的子类别﹐而生物是动物及植物的父类别(Superclass)。这种父子类别关系是软件中的组织相关对象的重要方法。例如﹕汽车、马车、脚踏车皆为一种车﹔所以﹐车是父类别﹐而汽车、马车及脚踏车皆为车之子类别。
设计软件时﹐当您知道公司今天生产 5部巴士及 5部轿车时﹐您已找到10个对象了﹐其中每一部车皆为对象。它们分别属于不同类别──巴士及轿车﹔然而﹐因巴士及