🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.program
Article #2367

�����������

#2367
From: Bird Bird
Date: Thu, 25 Dec 1997 00:00
867 lines
82836 bytes

                           �����������
                                                              ���ֿ���

ǰ    ��

�������������������Խ��Խ���ţ��ƺ���������˶���������Ϲ�����һ
��Ĺ�ʱ����֪��Ȼ��δ��֪������Ȼ������Ķ���Ϊ�Σ��������������ѧ
����Ϊ�Σ���Щ���Ⲣ�������˶��ܴ�������ġ�

�������ѧC++���˿�Ҳ��ʼ��������ֻ����һ�����еķ��������
�Ǵ󲿷�C++�Ľ̿���������ݸ���ǣ����ԣ����һ����������ʽ���
(OOP)��Ƥë������������ѧ��C++�𣿱��߼�����ѣõ������ѧ�㶮����ʿʵ
�ڲ��࣬��������Ū��C++�ĸ��١����ȱ����������ѧ���������C++��д��
��ʽ����Ҳֻ�DZȽ��ر�ģð��ˡ�

������ʵ����������ź���Ȥ�������ѧ������ͼ�����Ƕ�����Ŀ�����������
��ļܹ�������������Ķ�����ӳ�䵽������ģ�ͣ���ת����Եij�ʽ�롣Ŀ
ǰʹ����������������������ᴺ�������չ������������Dz���רҵ��
����ʦ����Ӧ�ö���������˽⡣

�����������У���������������幤����Ϊ���۵ĺ��ģ����ᴥ��C++�������
�ƵĹ�ϵ����˾��ɵ����£������ٲ��ͣˣ����й������������ĺ���

�� һ ��    ��ν��� (OBJECTS)

���������ԭ����Object������Ҳ���˰�����Ϊ�����塹������Ŀ������Ŀ�ġ�
�ȵȣ���Ϊͳһ����ڱ�����һ��ͳ��������������Ϊ������������ѧ
����һ�ɹ��ԡ�������� (Object Oriented����дΪOO)��ͷ�Ρ����������
��ʽ��Ʊ��OOP  (Object  Oriented  Programming  ) ���嵼�����(Object
Oriented  analysis, OOA)����������ʽ����(Object Oriented Programming
Lagnage,OOPL)������ƣ���һ���㡣Ȼ���������ʲ���أ�����ѧ�Ҹ���
һ�����壺

����һ�������塢�������һ������ȷ�綨��Χ���������������Ҫ�����
    ��������������ġ�

�������������ӣ������в���̤�������Ǹ�������������Ͽ��Ľ���Ҳ�Ǹ����
�����������ɫɫ������Ҳ��������������ิ��ˡ��������Ҷ����Խ���
�����ⶨ�����û�ã�����������·���ܣ��͸��µij�ʽ�������档�ٽ�һ��ȥ
�о������ߵ����г��������Ͻ�Ϊ���ǣ����Ҳ���������������ǰ�����ɲ
������Ҳ��ûɶ��֣����������ϵ������������Ѿ���������ߵ����г�������
�����ԣ����Ͻ𳵼ܣ�������Ĺ��ܣ�ǰ��ɲ��������Ȼ���������δ������
����Ϊ��û˵�ҵij��������ӣ����ҵij�ʽ���?��֪������࣡�ٶ�������Ҳ
�в���̤������Ľ�̤���ij������ܽ��Ƶģ�ͬ��ģ���ij�Ҳ����ǰ��ɲ��
������Ȼ����ij�Ҳ�Ǹ�����������ᵽ���ߵļ����µ����г������������
������Ҳ�������г�����������ģ�Ҳ������ֽ��ģ���ʱ���ǿɶ���һ���С�
���г����ġ����(class)�����Ҳͬ���и����壺

������춾����������ʡ���ͬ����Ϊ�����弰��ͬ��ϵ�����֮������Ϊ���

����dz�׵�˵������Ǿ���ͬ��������ļ��ϣ���֮����������ԣ������
Ϊ�䡸����(instance)��

������ͳ��������Ʒ�ʽ�ǽ�����Ķ������֮�ᣬ��ȡ�ʵ������Ͻṹ����ʾ
��������Եij��������㷨���������ϣ����߿������ƺ��������޹ء�������
�������ԡ����������ص����Ϻͳ����ϳ�һ�壬ʹ�����ߵĹ�ϵ����������
�ף�������������ʽ��������ص�֮һ��

������Ѷ����(information  hiding)��Ҳ��������ķ�װ��(encapsulation)��
�������׷ֳ�������Ա����ʹ�õ����Լ��ܱ������ڲ����ԡ�����������ȡȨ
�޷�����Ա����ʽ����������ô���������²����ĸ����á���춷�װ��
�ڵ������и���������ۡ�

����Cox ����Ϊ���ǿ��Խ��ɽ��������ʽ�����������IC��Ŀ�꣬��������Ϊ
��������ظ�ʹ����(reusability)����̳�(inheritance)���Ǵ���ظ�ʹ�õIJ�
�ԡ�����̳п�����Щ���ⲻ��������ȴ�����У������г���������˵����װ
һ�����ͳ���һ���綯��̤�����綯��̤����Ȼ����ǰ��ɲ����Ҳ�г����
�ʣ�ֻ���������������綯��̤���������ɽ�̤���Ŵ������ġ��̳�
���Ӵ���������ر����á��������Ӵ�����������ɾ�ҳ�ģ��ɷŴ���С��
.....�ȵȸ�ʽ������Ӵ�����ϸ��������������½��и�����Ľ��ܡ�

�����𳵡���������Ϊ�����ʻ������ʻ����������Ǹ��൱�������
�ʣ��𳵡�����ļ�ʻ��������һ����ʻһ�ʺ�����ʵ���Ͼ��в���
�Եļ�ʻ��Ϊ���������ʳ�Ϊ�������ԡ�(polymophism)��

�����?�棬��֪��������������ʵ�ڲ����Խ�����ǵ����⣬��ν������
������������أ���η������������Ŵ����������һ���ϵͳ����������
��Ĺ�ϵ����Щ������δ֪�����⡣�������У����߽����൱ƪ�������������
�ۡ������������Ӧ���Ʋ���(Booch)���о��ɹ�����Ч����ͼ����������
�Ľṹ�������������Ҳ��������̸����Ϊ������۽�ƫ��춴�ͳ��������ۣ�
����Ŵ����Ƚ�ĸ����Եýϱ��������߽����Ͷ�ɭ (Lorensen) �����������
OMT ( Object Modeling Technique ) Ϊ�Ǹɡ�����������һ�׼�����ķ�չ��
�̡�OMT���������Է�չ����ķ����������ʵ�������Ч���൱���롣

��������������幤�������ص㣬������ͼ�Խ�����ģ�͡��ķ�ʽ���������⡣
OMT���������������ֻ�ģ���������������Ľṹ������ģʽ�����Ƿֱ���
��

������(Object Model)

������������Ľṹ�������Ĺ�ϵ

����̬ģ��(Dynamic Model)

����ϵͳ��״��ʱʱ���б仯����̬ģ�����¼������״̬�ĸı�������ϵͳ��
    �Ľ������á�

�������(Functional Model)

��������ģ����OMT���ݴ�ͳ������Ƶ�һ���֡��������������ͼ(Data  Flow
    Diagram��DFD)����������ת�������֮���̡����DFD�����ѿɲο�����
    94�ڱ���׾����������Ƶ�˼ά��һ�ġ�

����OMT��������Ʋ����Ƿ���(Analysis)��ϵͳ���(System Design)�������
��(Object  Design)������ʵ��(Implementation)֮��������������۵㽨��ǰ
������ģ�ͣ��ټ�����ơ�ͳ�ϡ�Ȼ��ӳ���Ϊ��ʽ�롣

���������������ķ�ʽ��������������Ч������������Ƶ�Ч�ʣ�����Ȼ��
�ɾɷ���ת���������ʱ���ܻ��н��͵����󣩡��ٸ����Ե����ӣ�Borland ��
˾��Quattro�Ƴ���������Ƴ�Quattro Pro����������Ӵ���������ˡ�������
�ٶ���ȫ�ǰ����������ͣ�ҲʹBorland��˾��׬��Ǯ���ù�˾�ų���ɳ�
�ʰٷ�֮���٣��������dBASE����İ��Ŵ﹫˾��dBASE III�Ƴ���������Ƴ�
dBASE IV 1.0�棬���һ��ǰ���һ��Bug���еġ����ᣬ�ڼ�����ǰBorland���
�����˰��Ŵ

1.2������(Object Model)

��������ض��߱�������Ĺ�Ҫ�أ�����(attributes)����Ϊ(behavior)��Ҳ
�������������(operation)���پ�ǰ������ӣ����г�����й�춳�����ϵ�
�Ⱦ�̬�����Ͼ������ԣ������г��������Ķ�������ǰ��ɷ���ȵȶ��������
��Ҳ����˵������о�̬�����ϳ�Ա���Ǹ��������ԣ�������̬�����㷨
�������������Ϊ��������(operation)���Ǻ�ν��������ν����(Method)��
��������ʲ�᲻ͬ�أ�ǰһ�����ᵽ����ʻ��������󻯵Ĺ���������ʻ����
�˱��Ǹ�operation����ʵ�ʵġ�����ļ�ʻ������춸���������ض�����
(method)������˵�����γ��ķ����Ϳ������߾Ͳ�һ��һ������Ϊ�Ǽ�
ʻ�����ⲻ�ǹ���ͷ������Ĺ�����

�����뿴�ٴ�үע�⣬�ڻ�δʵ��֮ǰ�����еĸ���dz��󻯵ģ�������г�
�˿�����������⣬���ؼ���ȥ���ڵ�������Ƶ�ϸ�ڣ��������Ҫ���������
�����������йء�

1.2�����֮��Ĺ�ϵ

1.2.1������(Links)

�����ٶ����������ж����������(instance)��һλ������ʦ��һλ����ͬѧ��
����ʦ����ͬѧ��������������Ժ���Ϊ�������Ҳ����ġ�����ʦ����ͬѧ֮��
����ij�ֹ�ϵ���ɲο�ͼ1.1���Կ�������ʦ���̵�����ͬѧ��������������ͬ
ѧ���̡ܽ������ʦ�������������Ĺ�ϵ�������ᡣ

1.2.2  ����(Associations)

������Link����IJ��֣����ǵİ���(instance)������ʦ����ͬѧ������ʦ����
����Ǯ���ͬѧҲ����������֣��������������һ�㻯�ᣬ���ǵõ���������
����������ʦ���(class teacher)��ͬѧ���(class student)����ͬѧ��
��ʦ֮������ļ��ϱ��Ϊ����(associations)��Ҳ����˵����������ʵ������
����Ĺ�ϵ�����ǽ�������󻯣�һ�㻯�����DZ�ɵõ�����(association)��

���������ڴ�Ӧ�Ƚ���һ������������ķ��������������⵽һ�㣬��ʵ��
�����󣬾���������������ʦ����ͬѧΪ�о����ٽ����ǵĹ�ϵ���󻯡���
�ỹ�и������ӡ�

����һ����ʦ��ʩ�̵Ķ���ͨ�������λѧ���ֻ��һλ����ʱ������̵���
��ϵ���һ�Զ�(one-to-many)�Ĺ�ϵ����ͼ1.2��ʾ������һ��ѧ��ֻ��һλ��
ʦ��̣��̵���ϵ��Ϊ1��1(one-to-one)����һ��ѧ�����ֻ��һλ��ʦ����
����ϵ�ͳ��˶��һ�ˣ�����������������õ�ͼ�α�ʾ�������ұȽ����
�IJ��졣����ʵ�����У���ϵ���൱�߶����Եġ�����˵������Ǹ�ѡ���Թ�ϵ
(optional association)��������һ��һ���ƹ���У�һ�����˿���ѡ���?
���ޣ�����Ψһ����ż����ͼ1.3��ʾ�����й��ʱ������һ������Ƶģ��
�ӿ���һ�����Ŷ�û�У��о�С�����ֻ�����һ���ӣ�����������ܾͲؽ���
���ˣ������ͼ1.4��ʾ�ˡ�ͼ1.3�еĹ�ϵ��1���ޣ�ͼ1.4���޻���ࡣ������
���ر������Ҿ��û�����˼��

������ϵ(association)Ҳ���Բ�ֻ�޶�춶�Ԫ��ϵ(binary  association)����
��������Ԫ��(ternary  association)���Ԫ�Եġ�ͼ1.5 ��ʾ��ʦ��ѧ���
�ҵ���Ԫ��ϵ��

1.2.3  ���������(Link attributes)

����ǰ�����ᵽ�����ᶼ���ģ�����ʵ����У�����������������Χ�ϵ�
���ơ�������һ����ʹ����(multi-users)����ҵϵͳ(operating  system)�У�
ÿ��user�Ե����Ĵ�ȡ���в�ͬ��Ȩ�ޣ������93�ڽ������׾�����п�MS-DOS
�����н��ܣ���λ���ٿɷ��IJο�һ�¡�ʹ��������㼶��ͬ�����Զ�д������
����ܶ�����������մ�ߵĻ�ᶼ̸���ϡ���������������Ϊ�˱�֤�����İ�ȫ
����Ĺ涨����ʱUser�������ڶ�춵�������Ĵ�ȡ��ϵ�У�����д�ȡȨ��
���ԡ���ͼ1.6��ʾ��

����һ����������������Գ�Ϊ�ʸ�(qualificiation)���ɽ�����Ϊ�Ǿ����߼�
�Ե����ԡ�����ؿ���ͨ����ɡ���ͨ�С�ֻ��׼�?�ܾ���ж���������ֻ��
��ǰ�Ž���ų�������������м䡣������ֹ�ϵ�ǡ��ʸ񡹵��ж����⡣

1.2.4  ����(aggregation)

���������ϡ�������һ�������ɵĹ�ϵ������������������������������
�����������������������ȵ��������ɵļ����塣��������ǣ�Ԫ����һ
���֣�������ǣ������һ���֣�����������ǣ������һ���֡���������
�������һ���֡�������ǣ������һ���֡��������طǣ����֮һ���֣�

��������������Ӵ������Ҳ�����ã���������ð�ť������Ӵ������ϳ�һ
���Ի�����������Ϲ�ϵ(aggregation)�����׾ͺ��Ŵ����������Ը���ˣ�����
��ע�⡣

1.2.5  �Ŵ�(Inheritance)�����ɹ�ϵ(Generalization)

����������ֻҪ�Ƕ�����������нӴ������Ѷ��ض��ԡ��Ŵ���(inheritance)
����ʲ�İ���Ŵ��͹��ɹ�ϵ�ṩ�˳�ʽ���ظ�ʹ�õĿ��з�����������ѧ��
�۵������Ŵ����Ӵ�����綼������״��ɵ��ԵĹ۵������Ŵ����Ŵ�������
������Ԫ�����ã����ҷ�����ͬ����Ϊ�Լ����Ƶ����Ի�������һ�����Ŵ��ĸ�
�����  ( parent class ) �����dz�Ϊ���������(super class)�����Ӵ���
��(child  class)����Ϊ�����(subclass)�������������֮��������й���
��ϵ(Generalization)����ͬʱҲ�DZ�ʾ��is-a����a-kind-of���Ĺ�ϵ����
���ʲ���أ������İ���(instance)ͬʱҲ�����Ǹ����İ�����������ʮ
�ֵĺ��?�ٶ�������޸ĵĺ͸����ͬ�����罫�޿ɱ���IJ��������
����������(operation)�޷���ȷ�������������ϣ���������ڲ�֪���״
���£�������ܻᵱ����ʧ�󡣵�����𲢷Dz����޸ġ�������޸�(refine)��
����(append)һ������������(attribute)������(operation)֮�ڲ�����   (
method ) ������߻���ǰ���½���˵���������ͷ����IJ��졣����(operation)
��һ�������ġ�ǩ��(signature)��Ҳ����ijһ��������ơ��������ڴ���˵
���޸ģ�����춡������ԡ����޸ģ���νΪ����Ӧ�������������ʽ���������
�����ڲ��ķ���(method)���Է���µ�Ҫ�󣬵��÷���������Ҫ��ɵ�Ŀ��Ӧ��
�;ɷ�����һ�µģ������¶��塣�������ǰѡ���������Ϊ�����ϵļӷ�������
ȴҪ����Ϊ�������ⲻ��ͦΣ�յ��𣿲��ҵأ�Ŀǰ�ij�ʽ���Բ����������ؾ�
����������DZ�ڵ�Σ�գ����Ϊһ�������ݾ���

�����ղ�������������һ���ص㣺Ϊ����Ӧ������������ԣ�������޸����ڲ�
�ķ�������������ǩ��(signature)ȴ����ά����ͬ�������س��Ա�Ϊ����Խ��
(overriding)������C++�еġ��������롹(overloading)������ͬ�����������
�Ƚϡ�

�����ڴ˾�һ��������һ�����λ�ͼ�ij�ʽ�У����dz����ṩ�㡢�ߡ����ߡ�
����Ρ�Բ�εĻ�ͼԪ�����ڴˡ����У����߽����������(OOA)�й�����ģ
�͵ķ���������������ӡ�

�����������������������ͼϵͳ�ĸ���ͼ��Ԫ�����ȷ���������Ϊ������
˵��ռȥƪ��ƣ��ʰѸ����������������ͼ�С�����������ᣬ�������
�������ŵģ���Ч�����Ի������޳��ҽ�һЩ����������������������
Ϊ����������ڡ������ƺ�û�У�����һ���ǡ������������Ĺ�ϵ(link)����
����Щ�������Ҳȱ�����������������۲���Щ����Ƿ�����һЩ��ͬ�����磨
���Լ���Ϊ���������õ�������ȡ�������γɸ�����ڡ����У����ǿ����Ƚ�
����ֳ����࣬�ֱ�����ά��һά����άͼ��(��generalization)������һά��
��άͼ�ο��԰�����(scale)����������άͼ���м�հײ����������ɫ(fill)
�����԰���ɫ��λ�á��ƶ����������ȵ�������ɳ�һ�����յĸ����Ҳ����
ͼ��(figure)�����������ֵõ�һ���µIJο�ͼ1.7��ͬʱ���ڴ�Ҳ���Կ�
�����þɵ������

������ͼ�У����Ƿ��������ʾ(display)�Ĺ��ܱ���Խ(overriding)�ˣ�Ϊʲ
���أ���Ϊ������ͬ������ͼ��(figure)�Ǹ����Ҫ��ɶ�أ�һ����Ҳû�У���
����Ա�ʾ��subclass�Ĺ�ͬ���ԡ��κ����ֻҪ��һ�������dz����
(abstract)�����������һ���������(abstract class)����������ܲ���
����(instance)����ȴ�ɹ�Ϊ�Ŵ��ĸ�������춳���������ʵ�����ʵ
�������������Ӵ�Ҳ���Բ�����(instance)��

������һ��������Ӧ���Ŵ������Ŵ�̫�����ܻ�ʹ�Ӵ�ö���̫�����
̫�Ϻ�����Ч�棬�������ܺã����߲���ǿ���ܡ�ʮ�����������զ���ˡ�
Ϊʲ���أ�������ģ����������Ӧ�ÿ��Ա�������Ŵ��������µ���𣬵���
�����������Ŵ����������������Ծ�Ȼ�����ʡ��ˣ��������ľ����Ի���
������������������ˣ��������������Ŵ����ǿ��ܻ���û��Ч�ʣ���ˣ�
������Ϊ����ظ��Ŵ��Ĵ���Ӧ�û���һ����Ȼ���ޣ�����������Ǽ����أ���
�ͺ�������Ƶ�����û��й��ˡ�

1.2.6  ���ؼ̳�(Multiple Inheritance)

����ǰ�����ᵽ�Ķ��ǵ�Դ�̳�(single inheritance)��ʮ�ֵ��������֮�£�
���ؼ̳�����һ�����ͬʱ�̳���಻ͬ��������ԣ����ַ�ʽ��ӽ�����˼��
�ķ������������Ҳ���������⡣��ν���ؼ̳м���һ���������ͬʱ�̳���
�ุ���ͨ�����ǽ����������Ϊ���������(join class)��

�������ؼ̳������鷳���ǡ�ģ�����ɡ�(ambiguity) �ķ����������
������е����Ի��������ܾ������Ƶ�ǩ����������޷��Գ�ʽ���Ե����Ա�
�⣨��ȻijЩ��ʽ���Կ����趨�̳е�����˳�򣩣���ʽ���ʦӦ��Ҫ��������
ģ�����ɵ����⡣����ֵ��ע���һ����ijЩ�Ͼɵ���������ʽ����(OOPL)��
���߱����ؼ̳е����ԣ����磺Smalltalk-80��C++ 1.2��Objective-C��

1.3 �����������ϵ�ıȽ�

������������֮��Ĺ�ϵ�Ǽ����˸���Ȥ�ģ�һ����ʽ��̫���ܽ���һЩ��
������ܹ���ɡ�ǰ�������˵���(aggregation)�����׺���������Ĺ�ϵ
��죬������У����ǽ�����������ɶ���졣���������¿�֮ǰ�������Լ��ȱ�
��һ�£������Լ��Ƿ�Ҳ����ˡ�

1.3.1  ���Ϻ͹�ϵ(association)�ıȽ�

���������ǹ�ϵ(association)һ��������Ϲ�ϵȴ�ر�ָ��ij���ض����
������Щ�����ɵġ��ͺñ�һ����������������˿��֮��Ĺ�ϵ����Ҫ����
����ʽ�ǣ����һ���������һ����������Ԫ�أ��������ڡ����ϡ��Ĺ�ϵ
�ˡ�

1.3.2  ���Ϻ��Ŵ�(Inheritance)�ıȽ�

�������Ϻ��Ŵ�����һ���Ŵ���ϵͨ������Ϊ��is-a����is-kind-of������
һ������һ�֣�������ǰ���Ѿ������ˣ�����򱻽�����a-part-of����һ��
�֣���

����������ʱ�������ѡ�񼯺Ϲ�ϵ������Ŵ������á��Ⱦ�һ���нṹ
(list)�����Ͻṹ��һ�ִ������ϵĻ�������ѵ�(stack)��һ�� FILO (
first in ��last out ) �Ƚ�����Ľṹ������ⷽ����������вο������Ͻ�
���йص��鼮��������Щ�����������������˵�����ӽڵ㣬ɾ��ڵ�ȵȡ�
��������Ҫʵ���ѵ�����ѵ����Լ�Ωһ�Ĵ�ȡ����Ҳ�������������������
(push)�͵���(pop)�����ǿ��Բ�ȡ���ײ�������á��ѵ�����𡣵�һ���ɴ�
���Ŵ����µġ��ѵ�����𣬵�ע�⣡��Щɾ��ڵ�֮�������(operation)Ҳ
�ᱻ�Ŵ�������Ȼ��Զѵ���˵����������Ҫ��Щ���ŵ�������Ҳ����Ҫ����Ϊ
���������ɾ��ڵ㡣��˽���ɵڶ��ֲ��ԣ��Ѵ��кͶѵ��Լ���
(aggregation)������������˵�Ѵ��б�ɶѵ���һ���֡���ͼ1.8��ʾ��

����������ģ��(object model)�IJ��־ͽ��ܵ��ˣ�������ģ��������
��Ҫ��һ���֣������˶����ġ�

�ڶ��¡���̬ģ�� (Dynamic Model)

2.1  ��˵

������һ�������۵����ģ�ͣ��������������о�̬�IJ��֡���������Ҫ��ϸ
��̽���������Ϊ�������֮��Ľ������á�

2.2  �¼�(events)��״̬(states)

����������˵������е����Լ�����(link)������춸������״̬(state)����
һ���֮״̬������¼�(events)��Ӱ���ı䡣������������У����߻ᷢ��
���ǽ�ƫ��춼�ʱ(real-time)��ʽ����ƣ���ʵ��������ˡ�

�����¼���ָ������ijʱ�̵�ij�£�����������������һ��ʱ�䡣�����
���������һ���¼����¼�ͨ����һ���������������һ��������ܡ�������
��ֻ�ǵ����Ե�ѶϢ���ݣ����������д���ֵ���¼�Ҳ��һ����������
������Ծ߱������ԡ�����˵�����绰����(dial)�������Ҳ������ij������
������˵������5��������1���ȵȡ�ͬ�?������Ҳ���Ա���Ƴ��¼�������
�����д�����롣

����״̬(states)��������Ի�����ij����塣״̬�DZ����Ķ���ֻ�ڴ��¼���
����Ÿı䣬������ǿ���Ϊ���¼�������ʱ��Ϊ�������״̬��Ҳ����˵��
ij��״̬�������һ��ʱ�䣬ֱ���¸��¼�����Ϊֹ��

����Ϊ�˱�ʾ��һ�������¼������Ƿ����˳�����ǵñ�һ���¼��ġ��籾��
(scenario)������籾ʮ����Ҫ���о籾������ģ�͡������������籾�IJ���ͨ
������ƽ�����ܷ�������Ϊ���壬�ټ������⡣Ȼ��籾Ҳ�п��ܲ����꾡
�����ǿ��Ըģ�

�����籾׼������֮�ᣬ�������¼�׷��(event  trace)��ģ�⡣�¼�׷�ٿ���
��ȷ�Ŀ�����˭�������¼���˭�������¼�����ʱ�����¼����Ǹ��¼��ȷ���
���ȵȡ���������һ���¼�����ͼ(event flow diagram)����ʾ�ĸ�����ò���
��Щ�¼����ý�����Щ�¼��ȵȡ�

����״̬ͼ(state  diagram)�������ı�ʾ���¼������̼���״̬��Ӱ�죬��
�½�������λ�ͼ����״̬ͼ�У��ýڵ�(һ����Բ��)��ʾ�������״̬
(state)�����ͷ����������¼���ƣ����¼�������ͼ�Ͽɼ��Ա�ʾ���жϡ�
����ֵ�Ծ����¼����������������ź��̵Ƶ�״̬ͼ���ڴ˶�Ҫ�ļ���˵����
�����־ϵͳ�Ǹ������۾����ĺ��̵ƣ�������������䳵ר�õ����Ƿ��г���
�������Ƿ�Ҫ��ֱ�г����л���һ��ʱ���ת�䳵�ߡ�����Կ��ó���������˵
�ϱ���Ҫ����ʱ�������ж�Ҫ��Ҫ����ת��ƣ����Ҫ����ֱ��������
�ߵƵ�״̬ȥ���ڴˣ��Ǹ��ж�ֵ��������¼��ļ�ͷ�ϣ������������ơ�

2.3  ����(Action)��(Activity)

��������ͼ�ϱ���¼���״̬���ж�ֵ����̫����ͨ�������¼�֮��Ӧ�û���һ
���Ӧ�Ķ���  ( Action ) ������ͼ�еı�ʾ�������¼��������б�ߡ�/����
�����¼��ķ���ֻ�Ǹ�֪��ȷ��״̬�ĸı䣬������ת��״̬����¼��޹أ�
���뿿�ڲ��Ļ ( activity ) ���ı�״̬���������ܰ���һ����������
(  operation  )  ���  (  activity  ) ��ͼ�еı�ʾ�������ڽڵ���д��
do:activity  name�����߻���е�����һֱ��ǿ��״̬ͼ(state diagram)�Ļ�
������Ϊ��ͼ��ʾһ����ʽʮ�ֵ���Ҫ��ǰһ�����ģ����ͼ������״̬ģ��Ҳ
��ͼ����һ�¹���ģ�ͻ��Уģƣ�ͼ���ɴ˿�֪ͼ�����Ҫ�ԣ�����Ӧ�úúõ�
��Ħͼ�εĻ�����

�����¡�����ģ��(Functional Model)

��������ģ��  ( Functional Model )��OMT ���ֻ�ģ�������á���ͳ����һ
���֡�����ģ����������ϵͳ�����ϵ����̣����ϱ���Щ��Ԫ���ܴ��?����Щ
��̣���ȴ����������������ᱻ����ġ�����ģ����Ч�������ڱ�����   (
compilers ) ֮�ി�⴦�����ϵĹ���������Щ������������ϲ���춱����
������������ڴ�ͳ����������У���ȥ���ģ�ͣ���ʽһ�����д��ֻ������
�������������Ϊ��Ҫ�۵㣬����ģ��ֻ�����?����������ģ�Ͳ����ˡ�

3.1  �ģƣ���������ͼ

������������ͼ�Ļ����ǹ���ģ�ͱ�ʾ�����ĺ��ġ��ģƣ�ͼ�Ļ�����ǰ����ͼ
�εĻ��������ü򵥣����¾͸�ͼ��Ԫ�������ܡ�

3.1.1  ���?Ԫ(process)

����������һ����Բ�εĽڵ�����ʾһ�������?�������?(process)���Խ�
���������ϣ�����һ�ض����������������������ת�������������

3.1.2  ������(Data Flow)

������������ʾ�������봦��֮����ݵ����ϣ��ڴ������Լ�ͷ������ӡ���
ijЩ�����У�һ�����������ҵ���˼�ǽ���һ����ͷ�������ʾһ������������
�ܰ�������ϣ������ǻ�����Ҫ�ֽ����и��������������ʱ���Խ��������
��ϸ��������������Ŀ�ġ����?��Ԫ��

3.1.3  ������(control flow)

����������(Data  flow)ֻ�ǵ����Ĵ������ϣ����Ϳ���ѶϢ��Ȼ��ijЩ��
��(process)����Ҫ������������������ϴ���ķ�ʽ������ķ�ʽ�����Ǿ���
��������һ��ֵ����,�ڴ������������Կ����������������⡣���Ƶ�����
�Dz���(boolean)����ֵ��ֻ����α������������Ͽ�����Ӧ����춶�̬ģ��
(dynamic  model)�еġ��¼���������Ϊ�����ϴ������ܲ��ɷֵĹ�ϵ����DZ�
�����������ˡ��������Ļ������Ե����߼�ͷ��ʾ�¼�ѶϢ��

3.1.4  ���ϴ���(data storage)��Ԫ

�������ϴ��浥Ԫ����ΪDFDͼ��һ��ר�����Դ������ϵı�����������ϴ���
��Ԫ�Ļ������Զ������߱�ʾ��

3.1.5  ������(Actor)

����Actor��������ʾ�������Ķ˵㣬��������㣬Ҳ�������յ㡣��������С
���������ʾ��Actor�����ϴ��浥Ԫ�м������ơ������ϴ��浥Ԫ�DZ����ģ�
���ִ���κζ�������Actorȴ�����ϵ�ָʾ��һЩ����������������ϻ���
�����ϵĴ��?�����ʱҲ����Ϊ���ս��ߡ�(terminator)��

3.1.6  ������

����������һ����������������塣��������ʲ����˼�أ���Ϊ�ڣģƣ�ͼ
���ܻ�����������������������Ҳ�������ϴ��͸���硣���������������
ʾϵͳ�������㼰����յ㡣

3.2  �������̬ģ���빦��ģ�͵Ĺ�ϵ

��������ģ��������һ������ģ����ʵ��ȥ������Щ�£��ģƣ�ͼ�еġ����?
(Process)��Ԫ���Զ�ӳ�����ģ���е�����(operation)�������������������
�����ԡ�������(control flow)ǰ��Ҳ˵��������춶�̬ģ�͡��������˵����
��ģ�Ͳ����Ƕ������ڵģ����ǻ����ģ�ֻ��˵���Ǹ����Բ�ͬ�ĽǶ���������
�塣����ģ�������ϵ����̼����������ͼ�����ܱ�ʾ������ִ�е�˳�����
���迿��̬ģ�������㣨���ǵ�ԭ���𣿣��������봦�������̹�ϵ�����
�������(operation)�����͹�ϵ���������͹�ϵ����˼�ǣ�����(operation)֮
��IJ�ι�ϵ����ģ�齫��������и�ɵ��µ���ģ�鴦�?���ģ���ڵ���
�ԣ�Ҳ����״̬�ĸı䣬�Լ���������α��������ִ�з������ɶ�̬ģ��
������˶�����е�������˵������ģ�Ͷ��ǻ���ұ�Ҫ�ģ�ֻ��������
Ҫ�̶Ȳ�ͬ���ѡ��������������۵������չ����Ҳ������������ģ������չ��

������  ���� (Analysis)

4.1 OMT���������

����OMT������ʵ����һ�����幤�̷�չ�����ڴ���ϵ�����Dz�ȡ���в�������
�����壺

������(analysis)

���������������˽����ⶨ�忪ʼ����ν����������̬��������ģ����������
    �嶨����(software domain)�������������ʵ�����м���Ĺ�����

��ϵͳ���(System Design)

���������ģ��(Object Model)Ϊ����ʼ����ϵͳ�ļܹ������嶯̬ģ�͵�
    �籾����������ʵ����Ľ��ת���ɵ�����������̬��

��������(Object Design)

�������˵ϵͳ����dz�������ĵĹ��������������ƾ��Ǽ������ˡ��ڱ�
    �����У�����ģ�ͱ�������ϸ���޸ģ�ϸ���������廯���������ѻ�����
    ģ��ת����ʵ�ʿ��еķ�����Ȼ�����ģ�黯�����Ὣ������һ������
    ��

��ʵ��(implementation)

����ʵ�����ǽ�ǰ����õĽ��ת�ɶ�ӳ�ij�ʽ�롣�����ڴ��½��У����߽���
    �������C++��Ӧ�á�

4.2  ����

�����ⲿ�ݵ�������ǰ���µ����ݼ����������ɢ�����ģ�͵Ľ������ˡ���
�����ڵĹ������ǰ������������������ǿһЩ�ص㡣

����������������Ҫ�˽�����Ķ��壬��˵�һ���������������������Ū��
�������ϸ�ڣ�����ʹ������ȷ�����˽⣬Ҳ����˵Ҫ���������(problem
statement)����������Ľṹ���⹤���Ļ���ʹ�ͳ����Ʒ�ʽ�����޶���
�ġ���������ǰ�ڵ�׾���н��͵ú������ˡ�

�������ģ�͵Ľ��������Ȱ�һ������Ľṹ�������Ժ�������Ϊ�оٳ�������
������������Ĺ�ϵ������Ҫ������к������޹ص����Լ�����ɾ��ͬʱҲ
Ҫȥ�����������Լ�����ɾ��ͬʱҲҪȥ��������޹صĹ�ϵ����ᡣ�ʵ�
�����þ��������ͬ���������󻯣�ȡ����ͬ�ĸ������....����һ����Ҫ
���ģ����Ҫ��˵���ļ�����¼��������ʺ�������Ŀ�ġ���ص������ڵ�һ��
�ж�˵���ˣ���������вο���

������̬ģ�ͱ���������¼�������˳���״̬�ĸı䡣���ȣ����׼��һ��
�籾���籾����Դ�����ǻ���ʮ��Ĺ۰����ۻ�Ĺ��򡣾籾�����ݻ��?����
ϸ���ţ�Ҳ���ܺ͡�����硹һ�����ģ�����ȴ����Ҫ��Ȼ��Ҫ�ҳ���Щ�ǡ���
�������¼������źţ����룬�жϵȵȡ�ͬʱҪ����ÿ�������¼�����Ķ���
(action)�����丱���á�Ȼ���Ծ籾Ϊ������¼�׷��(event  trace)��������
�����������˳�򼰸��¼���Ŀ�����(target object)��

����ʹ���߽��� ( User's interface ) Ҳ���ڴ�ʱ�ڽ�����ʹ���߽�������
�����ѹ����ģ���Ϊ����Ѿ�������Ľ����������� ( easy use ) ��������
( user friendly ) �ģ���ǵ����������������֪��Ч����Ρ�Ȼ������
���ò������������ɳ�ʽ�߼��IJ��ݺ�ʹ���߽���������ġ������ڽ��죬����
�ĺû�ͨ������ʹ���߽����ж���ʹ���߽���������Ŀǰ���Բ�û��һ����ͳ
һ����ʽ��������Ҳ������һ�¹��ϵı�׼��

������춷�������ģ�� ( Functional model ) ���棬��Ҫ�Ĺ������ǽ����ģ�
��ͼ�������ϵ�����ʹ�������ʾ����������ͬǰһ�����һ��Ȼ�᱾��
����ϸ�»�����ԭ�򣬽�����Ĵ��?Ԫ����ϸ�ֳ����ڲ��ģģƣ�ͼ��һ��
�ظ�������裬ֱ�����ǵĽṹ�������ٻ�Ϊֹ��

������  ϵͳ���(System Design)

����ϵͳ�����������������г��������һ�����ڱ��׶�����һЩ��Ҫ��Ŀ��
����ģ�黯����Դ���䡢ϵͳ�ṹ�滮�ȵȹ�����

5.1  ģ�黯

������һ��Ҫǿ������ϸ�»����ĸ���������ǽ�һ����ϵͳ�г�Сϵͳ��
Сϵͳ�ٷֳ�ССϵͳ.....��˵ݻ�ʽ���з֣����Է�������λ��ָ����
������һ����������ɼ�����ϵͳ������ϵͳ�������ɸ�Сϵͳ����ɵġ�����
���������ϵͳ����ϵͳ��Ĺ�ϵ���в��(layer)���ָ�(partition)��

5.1.1  ���(Layer)

�������в����ϵ�Ĵ���ģ�飬�������ǣ���ģ���ṩ��ģ������Ĺ��ܣ���ģ
�鲢����֪����ģ������ʲ�ᣬ�������ϲ�ģ�顣��ˣ�����Ĺ����ǡ���
ֱ������ϵ�����ʽ�Ĺ�ϵ���Խ��ͻ���������(machine  dependence),��Ϊֻ
����ײ�ģ����衸ʵ�廯�����в����ϵ�ģ�������Ĺ����������dz���ġ���
��Ϊ��Ҫ��Ӧ�µĻ�����ֻҪ�黻�ײ��ģ��Ϳ����ˡ�

5.1.2  �ָ�(partition)

�����ָ��ʾ˵��ģ���ģ�����ϵ��ˮƽ����ġ�ģ�������໥�ĺ��С���
�����ṹͨ����������ϵͳ�м�����໥�ĺ��С��ָ����ṹͨ������
����ϵͳ�У�Ҳû������뻵�����⣬��ϵͳ�������Ҫ��

5.2  ������Դ(resource)

�����ŵ�өĻ��ʾ�������塢���̡�ӡ���ȶ���ϵͳ��Դ������ϵͳ���ϵ�
������붼����ҵϵͳ�ѹء�����Ӧ�ó�ʽҲ��Ӧ�����ó�ʽ�ڵĴ�ϵͳ����ʹ
�ù�����Դ����õ�������������ƶԵ����Դ�İѹ��������ʹ��������
����Դ���ɴ����ͳ�����Դ�Ĺ��?����˵����԰�ij�����������һ�����
������һЩ����.....����Ȼ���ܻ�Դ�ȡ�ٶȻ�Ч���е�Ӱ�죬����Ҳ�Ǽ���
��һ�����ȴ������һ�µķ�ʽ��������Դ��

�����¡�������(Object Design)

����������(Object  Design)�Ĺ����ǹ滮����������һ��������������
���ǵð�ģ�;��廯����ѻ�������ʵ����

6.1  ���㷨(Algorithms)���

�������㷨����Ҫ�����޿ɱ���ġ�һ���õ����㷨�����죬������Ч�ʡ��뿴
�������ʽ f(x)=10*x^250-20*X^249+1�� f(2)=? �ţ��ܼ򵥣���2���ȥ�㣬
Ȼ��һ���ᷢ��磬��Ϊ250�η�ʵ��̫���ˣ�û���㡣����д��f(x)      =
(10x-20)*x^249+1  ���ͺܺ�����������һ����ѧ���㷨�����ӡ����ȥѡ��
һ���ʵ������㷨�أ��ϸ�˵����㽫ǣ�浽���㷨��������Ҫ���ô�������ѧ
���㣬���µ�д��һ���ܺ���顣��������幤�̵Ĺ۵������ͱȽϼ򵥶�ֱ��
�ˡ����λ����һЩҪ�㣺ѡ����Щ���϶���û�����۵����㷨������ͨ������
Ч�ġ���������Լ�������㷨����һ�������뿼�ǡ�������㷨����Ҫ������
�ؼ�ƿ���ϵģ�������׶��׸ĵġ�

����Ϊ��ʵ�����㷨��Ҳͬʱ��ѡ����ʵ����Ͻṹ����Ȼ�о�̬�����Ͻṹ��
��̬�����㷨�����ǿ���������һЩ�ڲ����(internal class)��Ӧ��ʵ������
�������ڴ󲿷ݵ���������ʽ���Զ��������Ͻṹ����������Լ�ȥ�������
���㷨���鷳���������ʦ�ĸ�����

6.2  ����(association)�����

�������Ǻ���ܾö�û�������ΰ�������ˡ��������ἰ�����������Ǻ���Ҫ
�ģ�������ʵ�������أ����������Թ�����;�ķ�����������

6.2.1  �������(One Way Association)

�����ü���ǰ����������ʦ��ͬѧ���Ľ�����ϵ��˵�����������͡��̵�
������������������ǵ����Ե�����ʦ��ѧ���û��ѧ��̵�����ʦ������
������ʵ��ͨ����ָ���ɡ���������һ��һ(one-to-one)�ģ�����һ��ָ��
�Ϳ��Խ�����������һ�Զ�(one-to-mamy)�������Ҫ��һ��ָ�꣬��һ��ָ
��ı�񡣵�������ϵ�����������ƣ���һ��Ҫ��һ������Ȩ��ֵ
(qualificiation)�ı���������ˡ�

6.2.2��˫�������(Two-way association)

������һЩ����£�˫��������б�Ҫ�ġ����ȥ�ķ���ʹ���ʴ�춷����ʹ��
�ʣ�����͵������һ����һ��ָ�����������㹻�ˣ�����Ҫ�÷����ϵʱ��
����Ѱ�ķ������ҵ�����ָ�����Դ����������ȥ˫��ʹ��Ƶ�ʶ���࣬��
�����˫ָ�ꡣ�ڸ��ӵ�����У�������������Ĺ�ϵ���Ƕ�Զ�Ĺ���֮���
���ñ�����Ҫ����������һ����������ϣ������Ҳ��һ����񡣹����Щ��
�͵ı�񣬿ɿ������Ӵձ�(hash table)��ʵ����

6.2.3����������ѻ�(Optimization)

�������ǡ����ģ�͡���������������������Ǻ���������ܣ����ҷ����
ʵ�ġ����������̫�����ˡ�Ϊ�˴���һ���¼�������Ҫ������������͸����
����ϵ(association)���ݡ��ͺ����̨�������ۣ������ʡ�����þ����ٸ�
����������֧�߲��ܵ���Ŀ�ĵأ���������ٹ�·���Ϳ���ֱ����ۡ�
ͬ��ģ������ϴ���Ƶ�ʸߵ�����䣬��ʹ�˴�û��ֱ�ӹ�����Ҳ���Կ����ر�
����һ����ϵ(association)�������ѻ����ϴ���·����Ŀ�ģ���ȥ������
����Ҫ���߳����衣

6.3���Ŵ�(Inheritance)������

�������������ص����������Ŵ��ԣ�����ϣ�������е�����ܹ������ܵ���
��ʹ�ã��̳о�������Դ�������������Ƶ�ʱ�估���߿��Ŷȡ�

��������е�һЩ����(operation)���ܺ;ɵ��������ͬϵͳ�����Ƶ������
�����������Ĺ��ܣ�����������ȴ����һЩ������Ϊ������ܻᵼ���޷�
�Ŵ����������ʵ�ڵĺܿ�ϧ������β����������������㡹���ŵIJ����أ�
������һ�������⡣�������Ӷ��ŵIJ������ǵ�ǩ��͹��ܾͿ���ȫһ���ˣ�
����˵�ڵ�ɫ��ͼϵͳ�ϻ��㣬ֻ��Ҫ�������ϼ��ɣ����ڲ�ɫϵͳ��ȴ��Ҫ
����ɫ(color)�IJ�����δ�ɹ����أ�ֻ���ڵ�ɫ����ĺ����ж��һ����
��Ҫ���ɺ��Ե���ɫ����������ԭ��������ͬ������(operation)�����ǩ��
(signature)��ͬ�����ڲ�����(method)��ͬ��ͬһ��������

���������Ŵ���������⣬�½������Ҳ�����뷨�������Ŵ�������Ϊ�����Ƶ�
��𶼾��й�ͬ�����������ԡ����ǽ���Щ��ͬ�����������Գ������Ϊһ����
ͬ�ij�����𡣵���춸��������в����ԣ���ijЩ���������dz���ģ���Ǻ�
��������ͳ��˳�������ˡ�

�����������в��ٺô�����һ���޸��乲ͬ�ĸ����Ϳ���Ӱ�쵽���е������
���ڶ������Բ���ͬ�����������Ӧ��ͬ�Ļ��������ǰ�ߣ�������Ϊ��dz��
����������ۣ�����Ӧ�ÿ����˽⣻����Ҫ����һ�µڶ��㡣����������幫˾
����ͬһ�����������в�ͬ����Ŀͻ�������������ɾ��ij�ʽ��ֻҪ�Ŵ�
�µ�����𼴿ɡ���Σ���һ����ͼϵͳ�Ļ�ͼ�����ԣ�Ϊ����Ӧ��ͬ����ʾ
ϵͳ�������Ŵ���Ӧ��ͬ����������������ϻ�ִ��ʱ��������ʵ���������
�������Ϳ����ˡ�

6.4����Ѷ����(lnformation Hiding)

������ǰ���½��У�����û�ᵽ��Ѷ����(lnformation  Hiding),Ҳ���������
��װ��(encapsulation)����װ�Ժ����ϱ�ȫ(security)���ܻ�Ϊһ̸������ָ
����ϵͳ���ϵı��ܺͰ�ȫ�Ŀɿ��ԣ�ǰ����������幤���ϵ����塣��Ѷ����
��Ŀ���ж�����һ��ʹ����(operation)���޶ȵĴ�ȡ���ϳ�Ա�����������
�����á�Ҳ����˵�����Dz�ϣ��������ǣһ����ȫ�?������޸������ķ���
(method)ʱ����Ԥ�ڵĽ�������ṹ��Ӱ�졣�ڶ�����ʹ������뽨��һ��ͳһ
�Ľ���(interface)��͸���������ȡ��ı�������ԣ�������Ч�ض�ֹ�����
��������ƻ�������Ҫ���ǣ����������������ij��󻯳̶ȣ�һ�������
����������������Ҫ����ȥ�����������Щ���Ժ���Ϊ�ñ������أ�˵ʵ��
������Ҳ�����˺ܾá�һ������Ŀ���������ģ��������Ľ�����¶��������
�������Ԫ������������������������һ�����⣺�������ȥ���һ���õĽ�
�棿������Ŀ�кõĽ����Ǹ߶ȳ���ģ��������ڲ��ṹ�����棬�ܹ����ǵ���
�����������Կ����ø����Ľ��棬���Ҳ���Ҫ�κ���ɾ�޸ģ���ͬʱҲ����
�����ӵؿ�������Ķ�����

6.5�����ģ�黯

������ͳ��������ƺ�����ģ�黯������������幤��ͬ��Ҳʮ������ģ�黯��
ģ����������岢����ͬ��������Ϊģ��Ľ綨��춡�����ģ�͡��ġ����У�
Ҳ����˵�������͹�ϵ�������Ƶ�����ģ�黯��������γ�ģ���أ�ģ����ִ�
��ʲ���ϵ�أ����������ԡ������ԡ����ж�ģ���ڳ�Ա�Ĺ�ϵ�����ԡ�������
��������ģ����ģ��֮��Ľ������á�����������һ��Ŀ��Ա����õ����ķ�
����ģ�������ǽ����Եͣ�������ζ����ģ�黹�����ٱ��зֳɸ�С����ģ�顣
ͬ��ģ���������ǽ��ܶȵͣ��������������Ҳ�Ǵ����ͳ�����ģ��֮
���������Թ�ߣ�Ӧ�ÿ���ģ��ķָ��ʽ�Ƿ��׵���ͬ��ĵ������õ�����
������������ˡ����ģ��Ľ����Լ������Ե���ϸ���ݣ���ο����ڽ��ࡣ

�����¡�ʵ��������

7.1����������ʽ����(Object Oriented Programming Language)

�������ɷ��ϵģ�����������(OOD)����������ʽ���Ե������̶ȼ��ߣ���
��������Ƶĸ������ߡ����ͳ����ˣ���ȴ���ڰˡ������������ʽ���Է�
չ����֮��Ŵ����ʡ���ͳ�ij�ʽ���Բ��Dz���Ӧ��������򷽷���ֻ�Ǻ���
���ˣ������Ŵ�  (inheritance) �ͺ���ʵ������˵������������ר�õij�ʽ
���ԡ�����������ʽ���Բ���һϦ��ɵġ��ӳ�ʽ���Եķ�չ��ʷ�У����Կ�
��һ���������������һ������Եķ��෽ʽ�����е�һ����Ĵ�֮��ͬ��
�������ڴ˲�ȡ������̬�Ĺ۵�������ʽ���Ե��ݽ���ɳ�һЩ����Ϲŵ�
��ʽ���ԣ���������ԣ�û�н��������������ϱ�ʾ�����йŵij�ʽ����
�� FORTRAN��BASIC ���л��������̬���������ִ���̬�ȵȣ����ij�ʽ
������û�Pascal����߱��С����ϡ�ʽ�����ϱ�ʾ��������һ��ij�ʽ������
Smalltalk ��C++���������װ�ı�ʾ��ʽ��

��һ���������������ʽ����(OOPL)�ܹ�ȷʵ�Ľ�����Ķ�����(Domain)ӳ��
����ʽ�С����仰˵����ǰ�������������ĸ���������Զ�Ӧ�ñ����OOPL��
�ܲ��ҵأ��������Զ����ܺ��걸�ذ���Щ���ԡ�����˵�����ؼ̳�
(multiple inheritance)��������춽Ͼɵ�OOPL�У�����C++ 1.2�ȡ����춶���
�̳�(multiple  inheritance)���ģ������ (ambiguity) �ķ���Ҳ������ͬ��
���⣬����ϣ���ʽ�����ܹ��ṩһ�ױ�׼������ʽ��(Class  library)����
��Smalltalkһ�����ʦ�������������ϰٸ��Ѷ�����������C++��������
iostream��I/O������������������ʽ���Զ����������ڹ�Ͷ�����
ͬ�������������������������е�ϸ�ڿ�������һ�������߲��ɲ�ע�⡣

��������ĿǰOOPL���������ķ��������ڳ�ʽд��ʱ�ڳ�ʽ���������Ŵ���ʽ
����������ܻ������ִ��ʱ��(run-time)�ɲ�������ij�ʽ���ԡ���ʱ�൱��
������Ҳ��һ�������

�ڰ��¡����C++

������ȻSmalltalk����ʷ��������ܶ����ñ�C++�󣬵�C++�������Խ�ǿ����
�C++�Ľ������Ƕ����֮�꣬������Ȥ�Ķ������вο����ڱ����н�̽��C++
���������е�Ӧ�á�

8.1�������Vs�����

������Ҫ��Ϊ��ڵ���Ƹ���ˡ�C++�е���������ģ�� ( object model )��
�������ɶ�����أ��ͳ��󻯵IJ�ζ��ԣ����ߵ���������ȵġ���ʵ�������
˵��C++�����ij�Ա��ȡ���Կɷ�Ϊ����(public)������(protected)��˽��
(private)�����ڲ������Ŵ��������£�����(protected)��˽��(private)��
����������б����صIJ��֡���ֻ����Ŵ�ʱ��public��protected�����Ŵ���
�����Ϊʲ��Ҫ�������أ����Ǹ�����Ȥ�����⡣��ݱ��ߵ��о���
private��Ա��ʵ��һ��Ҳ�ᱻ�Ŵ�������𣬵����ܱ������ij�Ա��ȡ����
���һ�����Ե��Ŵ�(implicit inheritance ) ��������һ���Ƕ�������private
��Ա���Ա����ɸ������ʱ�Գ�Ա��������Ϊ��Ҫ���ij������(operation)��
�ķ���(method)������Ҫ���ڲ����(internal class)�������ģ�顣��Щ��
Ա���Ŵ��������壬Ҳ�ͳ��������Ŵ���

8.2  ��Խ(overriding)���������(overloading)

������Խ���������������ǡǡ�෴����Խ��ǰ����½ھ�̸���ˣ���˼������
�������ȡ����������ڲ��ķ����������ʺ��������·������������
��(overloading)�ֱ���Ϊ����Ƶ��ظ�ʹ�á�����������������ģ�����ABC
�������������������ABC(int)��ABC(char)��Ҳ����˵�������ͬ�ģ������
��һ����ǩ��(signature)��ͬ���ں���ABC����ʱ�������е���ʽ��
ABC('A')����������ԪA���ͺ�ABC(char)��ǩ����ͬ����ʱ������ABC(char)��
������ֻ�Ǻ�����������Ҳ�ɶ������롣������������һ�����Ե���
�ӣ�ʵ��ļӷ��DZ�����ͼ�����ӣ��������ȴ��ʵ����ʵ�����鲿���鲿
����ȴ���Թ�ͬʹ�üӺ�Ϊ��?ͬ�ļӷ����㡣

8.3  ���⺯��(virtual functions)��������(abstract class)

������춳������(abstract class)�ڡ������ơ�һ���У����ἰ�������
��������н�����C++����α�ʾһ���������

�������⺯��Ĵ���Ϊ����Ҫ�����ú����ִ�����������޷����壬�������Ѷ�
�壬����ȴ���ܻᱻ�ı䡣�����ģ��һ���У������һ�����λ�ͼ�����ӡ���
�е�ͼ�Σ���ͼ���ߣ��������Ȼ�ͼ������һ����ԭʼ�ĸ����Ҳ���ǡ�
ͼ�Ρ�����ڡ�ͼ���������������(operation)�С���ͼ(draw)������Ŀ��
������ͼ��Ļ���ȴ�в�࣬��ˡ���ͼ�����������ڡ�ͼ�Ρ�����д��ڣ���
ȴû��������Ķ�������ֻ�����Ŵ��Ӵ�Ҳ������Щͼ������в��ܶ��壬
����������ͼ��������Ǹ����⺯������һ������������ģ��ٶ��и�����
���Ρ���𣬶������ͼ(draw)������������Ȼû���⡣���ڼ����Ŵ�������
���Ρ����������ǿ������¶��塸��ͼ��������������������ͼ��������
һ�����⺯������ǰ�ߵ����Σ�����Ѹú�����Ϊ��������(pure
function)��д����virtual  ABC (void)=0�������������һ�������ʹ������
�����dz�����𡣵�����������������㲻���dz��������Ϊ���������
��������(instance)��ֻ�������Ŵ��������

8.4  �(Template)

����ģ��(template)��AT&T C++ 2.1�¶���Ĺ��ܡ���������������۵���û
����ϵ�������ڼ����ظ�������ȴʡȥ���ʦ��������

�����뿴������ӣ��ѵ�(Stack)��һ���Ƚ����(FILO)�����Ͻṹ�������е�
�ѵ�û���������ƣ����⣬���޶�������ѵ�������֮��̬�����������
��������ʵ��״��������һ���¡���2.0��ǰ��C++�У�����Զ�������push
�����룩�����������д���������£���Ϊ����ķ�ʽ��һ��ֻ�������̬
��ͬ����Ҫ�ظ�д�ܶ༫���ƵĶ������뺯���������template���Ϳ����ɱ�
�����Զ��������Ƶĺ������8.1��ʾ����ˣ���ʵ��Ҳ��ˣ�������ֻ�ǰ�
���ģ��������Ϊһ��չ���޼�(MACRO)��ָ����ѡ�

8.5  Ԥ�����ֵ

����Ԥ�����ֵ��C++ �����ӵĹ��ܡ�ǰ�������ɫ���ɫ��ͼϵͳ�л�����
����һ�»�ʱ�����ĸı䡣����˵��point(int x, int y, int color=1)�����
ͼ�����ǩ������ʽ�ú��е�ɫ���ķ���������������������ֻ����
���ֵ���ѣ�������ܲ�֪��ϵͳ��춲�ɫģʾ�£���ʱ��ɫcolor�����Ԥ
��ֵ�������ó��ˡ����⣬��Ԥ��ֵ�IJ�����ñ����ڲ����е�����ͷ������Ԥ
�����ֵ���ܷ�����ȷ��Ч�á�

8.6  ��Ҫ

�������C++�����������ƽ��йص��ص㣬�ͽ��ܵ���ߡ�������C++���鲻
�٣���������вο���

������������Щ��ϵC++����Ȥ�����������ͬ����������ۡ���һ�����
�£�ָ��(assign)����ֵ�Ǻܼ򵥵��£�����X=3�ȵȣ�������ָ���أ�һ��
�dz���������ǣ��ظ����롱������������ӣ���A=Bʱ�㽫B���������еij�
Աһ��һ���ᵽA�����С������������������أ���C++ 1.2�У���������һ��һ
��byte������ȥ����C++  2.0���Dz�ǰ�����ᣬ��ο�����Ա�ķ�ʽ�����仰˵
����������͵͵�ء������Ƕ��������ˡ�������������ӡ�1.2��2.0����������
��ͬ��Ϊʲ��2.0Ҫ���أ����������������������ۡ�

������һ����Ȥ�������ǹ�춱��������?C++����û�ж�����������Ҫ����C++
��������һ����ǰ�˴���������C++�ij�ʽ��ת���ɣõ�ԭʼ�룬�ٽ��ɣõı�
�������б���Ĺ�������������Ȥ�����ԭ������ΪC++����ɱ���Ϊ������
�ľ޼�ָ��(MACRO)��ǿ�档����ǰ�����ᵽ��template����һ�����Ե����ӡ�
����ת��class������ǰ�˴�����Ҳֻ�ǽ������İ���ת�ɡ�Ψһ��ơ��Ľ�
��(struct)���ѡ�����Ȥ�Ķ��߿����Լ����һ��ת������Ӧ�ò���̫�ѡ�

�ھ���  ��ʽд���ķ��

����һ��õij�ʽ�����񣬶Գ�ʽЧ�ʵ�Ӱ����Ȼ��С�������������?��
��ά���׶���˵ȴ����Ҫ����Ϊ��ʽ�벻����ֻ��Ҫ�����ִ�ж��ѣ�ͬ��Ҳ��
���ǿɶ��ġ�����˽�ġ�����˵ע��Ӧ��д���ף���ʽ�����񡢱�������ȵ�
����Щԭ�����Ų������κν̿�����DZ�����ǰ�������ж���ֻһ�ε�ǿ����
���ڱ����б��߲�Ҫ�ص���Щ�ߵ������������һ�����õġ�������������
Դ��Borland��˾������TURBO C++/BORLAND C++�е�CLASSLIB������ʽ�⡣Ϊ
ʲ��Ҫ��CLASSLIBΪ���أ����߲�û����ҵ��ͼ����������Ϊ������ȷ��ע�⡢
��ȷ�����õ������Ŵ��ȵ����ʡ����׳�ʽ��Ĺ������ṩһ�ױ�׼�������Ͻ�
�����������ʦ�����а�STACK�ѵ���QUEUE���С�ARRAY���С�HASHTABLE��
�ձ?STRING�ִ�......�ȵ�������¾����е��ִ�����������ǵġ���ϣ��
��λ�������µ�˵���У�ѧϰһ�׺õ������Ƶķ��

9.1  String ���Ľṹ

������ȻString�ִ������һ�����Ͻṹʵ������𣬶�ֻ��һ����ǿ������
��̬����ΪC++ �����ڽ��ִ����ͱ𣩣��������������ý��׶������Ա�����
��������ۡ�String�������Sortable����Ŵ�������Sortable��ߵ�������
�ܲ����ۣ���ΪSortableҲ�����Լ��Ĺ��ã���String���������ܷ��Ҫ��
�ȷ������£�

class String:  public Sortable
{
    public: // ������Ҳ����String���Ľ��沿��
                String( const char * );
                String( const String& );
                // �������뽨����

        virtual ~String();

        virtual int             isEqual( const Object& ) const;
        virtual int             isLessThan( const Object& ) const;
        // ���������������������Ƚ����ִ���С����ͬ

        virtual classType       isA() const;
        virtual char            *nameOf() const;
        virtual hashValueType   hashValue() const;
        virtual void            printOn( ostream& ) const;

                String&         operator =( const String& );
                                operator const char *() const;
    private: // ˽����String������ܱ�������͸�����ڲ�����
                sizeType        len;
                // ��¼�ִ��ij���
                char           *theString;
                // �ִ������ݱ����������Ԫָ����
};
                ��9.1 String������������б�


9.1.1  �������ƻ���Ա (Constructor and Destructor)

����String�Ľ�����Ա�Ƕ�������ģ���Ϊ��String�İ������ʱ��Ҳ����һ��
�ִ�����ʼ����������ʱ��Ӧ��Ҫָ��һ�������ִ�����������λ���ɴ�
�˽�һ�㣬����˵����Ҫ�ر�дһ��ר��������ʼ����ij�Ա���������ڴ˴�
String������ȷ�÷��ǣ�
String NewString ( "Hello C++" );
���Ҫ�����׶ε���ʼ���������ʧȥ�����ߵ������ˣ�����
String NewString ;
NewString.init ( "Hello C++" );   // String.init �DZ��߼���ij�Ա����
���ᣬΪʲ�Ὠ�����������������뺯���أ��������˵���У�String�������
ʼ����ֱ��ָ��һ���ִ���NewString�����������ֱ�۵��÷�����������һ��
���������Ҳ��ָ��һ���Ѿ����ڵ�String������������Ҫ����һ��������
�ˡ��dz�����ʲ�����أ���˵�����߻���ϵͳҪ��һ��ռ��������ִ�������
������������ʱ�ᣬ���Ҫ���ظ�ϵͳ����Ȼ������Լ����һ�����춸ղ�
�ٶ���init����Ҳ���ԣ���������Զ���ʰ���Ǹ���𣿴���һС�����ǿ�����
�⵽�������һ�����ʱ��Ӧ�����ý���������ߡ�

9.1.2  ��յ��ڲ��ṹ�뿪�ŵĽ���

����String�ڲ������������ӵ��أ���˽�������洢������������һ�������
�������ִ����ϵij��ȣ���һ����Ԫָ����ָ�򽨹���������������ִ����ݵ�
����ռ䡣�������������ˣ������ִ����Ϸ���˽�����ڣ������Dz����޷�
��ȡ�ִ����������ǵģ���ȷ��ˣ����뿴String�Ĺ�����Ҳ����������
���ݣ���������Ҫ�ij�Ա��һ���Ƕ�������������"="����һ���dz�Ա����
printON()����������������"="��������ָ����һ���ִ������ֵ��������A=B
���ַ�ʽ���������Ը���ִ������ݣ�printON()��Ա��������Խ��ִ�����
�������ָ����������(stream)�ϣ���˾Ϳ���ȡ���ִ������ݡ���Ϊʲ�᲻��
��Ԫָ��ֱ�ӷ��ڹ������أ�����DZ�С�����۵��ص㡣������֮ǰ���ᵽ����
Ѷ���ص����⣬�ڴ�����һ���ܺõġ�����ڹ�͡���Ϊ����ϣ���������ĵĺ�
����dz����ܹ�����ĸı���������ԣ���Ϊ������û�������õı������Ǻ�
�����޸ĵġ���String���и������Ǽ�¼�ִ������õģ�����ֻ�Ǹı��ִ�����
�������Ѷû��������µĻ����Dz��ǻ���������أ����Һ����Եģ���Ա��
�����ױ��ƻ�������͸������������ȡ����Ҳ����ͬʱ�������ϡ�Χ������
�и��������������(cast)������������������أ�����������String�����ָ
��ת������Ԫָ�꣬����ʵ����ת��������Ԫָ��ʵ������ָ��String����д�
����Ԫ���ϵĴ���ռ䣬�������˵���ð������ҾͿ����Լ�ֱ���޸��ִ�����
�ˣ��ǵ�����ԣ���������ע����ȴ����˵��ò�Ҫ����޸��ִ����ݣ������
��ܵı����ֻ����ȡ�����õġ���Ȼ��String�Ľ�����ܻ����Ǻ���ȫ����
��Ҳ�ṩ�����ʦһ���ܴ�ķ�չ�ռ䡣


9.2  ע���ʹ��

����CLASSLIBע���ʹ�����Ҽ�������ӵ�һ�֡������ע�⽫��ʽ�����Ե���
����������ʹ��ע��Ĺ��������ʾ����ֵ�ö��߲ο���

��ͷ������(header files)

// Content ---------------------------------------------
//      ����������������ģ���ں�����Щ������𡢱���ṹ�ȵ�
// Description
//      ���ģ�����Ҫ���ܸ���
// End --------------------------------------------------

// Interface Dependencies ------------------------------
//      ���(#include)����ģ���ԭʼ��

 ��
--
 * Origin: NJU PowerBBS <bbs.nju.edu.cn>
Technical Details
Message-ID: <gxl9pd@bbs.nju.edu.cn>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB
X-Google-Thread: fc86e,72bd0fc535cbc510,start
X-Google-Attributes: gidfc86e,public
From: Bird_Bird.pbbs@bbs.nju.edu.cn (Bird Bird)
Subject: �����������
Date: 1997/12/25
Message-ID: <gxl9pd@bbs.nju.edu.cn>
X-Deja-AN: 310079766
Organization: PowerBBS NJU Station
Newsgroups: cn.bbs.comp.program