计算思维导论第10讲-软件思维_第1页
计算思维导论第10讲-软件思维_第2页
计算思维导论第10讲-软件思维_第3页
计算思维导论第10讲-软件思维_第4页
计算思维导论第10讲-软件思维_第5页
已阅读5页,还剩91页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10讲软件思维:结构-对象-组件-服务哈尔滨工业大学计算学部教学委员会主任国家教学名师战德臣第10讲软件思维:结构-对象-组件-服务一、软件系统构造方法的演变二、计算机语言与软件构造能力三、结构化程序设计四、面向对象的核心概念五、面向对象的程序设计六、基于对象框架构造软件结构化程序构造60’s,70’s年代的软件:

结构化程序编程语言:C语言,Fortran语言函数=算法+数据结构系统=函数+函数调用简单的平房Main(){intj;j=HowMuchBeer();}intHowMuchBeer(){int

BeerBottle=1000;int

EmptyBottle=0;fori=0toBeerBottle{EmptyBottle=EmptyBottle+1;if(EmptyBottle==3)then{BeerBottle=BeerBottle+1;

EmptyBottle=0;}}if(EmptyBottle==2) {BeerBottle=BeerBottle+1;

EmptyBottle=0;}Printf(“EmptyBottle=%d”,EmptyBottle);Printf(“BeerBottle=%d”,BeerBottle);}主函数(){

函数1();

函数2();}函数1(){…}函数2(){…}数据结构算法软件系统构造方法的演变面向对象的程序构造消息数据函数函数消息对象=函数+数据结构系统=对象+消息80’s年代的软件:

面向对象的程序编程语言:C++(83),Java(95),Visual系列语言(90)等复杂的特色建筑如:巨大拱顶和圆顶如何建设?对象(类)数据函数函数对象(类)数据函数函数对象(类)软件系统构造方法的演变构件化的程序构造构件=实现体+接口实现体=对象+消息系统=构件+连接件90’s年代的软件:

构件化系统编程语言:Visual系列语言;Windows操作系统现代化复杂的高楼如:地基、承重、结构怎样?数据消息函数函数数据函数函数对象1对象2构件的接口构件1构件的接口构件2构件(实现体)软件系统构造方法的演变构件的接口构件化的程序构造90’s年代的软件:

构件化系统基于体系结构与设计模式的软件开发J2EE:Springs,Rails等.NetCORBA中间件予以支撑:Weblogic(BEA)WebSphere(IBM)Tomcat(开源)

…现代化复杂的高楼如:地基、承重、结构怎样?软件系统构造方法的演变服务化的程序构造服务1服务nAB服务1服务m服务1(需求)服务总线:

控制并切换<服务1(需求)>是调用构件A的服务1还是构件B的服务1服务=构件的公共标准的接口系统

=服务

+服务总线构件

=对象

+消息系统

=构件

+连接件如:各建筑之间的互连互通?城镇与城市的构建2000’s年代的软件:

面向服务的体系结构SOA

基于Internet/云计算的体系结构软件系统构造方法的演变简单的平房复杂的特色建筑如:巨大拱顶和圆顶如何建设?不能倒塌是第一位的现代化复杂的高楼如:地基、承重、结构怎样?如:各建筑之间的互连互通?城镇与城市的构建结构化程序:算法+数据结构子程序+函数调用对象化程序:对象+消息构件化程序:构件+体系结构服务化程序:服务+服务总线软件的可靠性、可用性等软件系统构造方法的演变软件系统构造方法的演变过程基于组件/构件的构造对象类对象框架基于对象框架的构造结构框架(中间件)软件系统面向服务的软件系统构造VisualBasic基于VisualBasic的软件开发面向对象的程序设计语言C++,Java,Python,…Springs框架Hibernate框架Struts框架Rails框架--中间件环境……基于xx框架的软件开发WebService&SOASoftwareforCloudSoftwareasaService云环境移动/嵌入环境电脑环境结构化程序设计语言C,Fortran,…高级语言程序设计计算机语言与软件构造能力不同的计算机语言分层架构/事件驱动架构/微核架构/微服务架构/云架构……软件构造能力是计算机/软件工程学科学生未来的主要竞争力软件构造方法发生了很大的变化关于本讲,要注意:内容较多,不能够做到完全理解---导论注重构造思维的理解,不要在意一些细节的不理解---指南进一步学习:MOOC《软件工程专业导论》(中国大学MOOC平台)第5讲软件系统构造--函数-对象-组件与软件框架第6讲软件生命周期第7讲理解问题--软件需求第8讲软件的艺术--软件设计计算机语言与软件构造能力软件系统构造能力的培养决策者(CEO)信息主管(CIO)软件总设计师(CTO)软件架构师项目经理软件设计师软件构造师软件咨询师软件测试师软件配置与维护师IT系统维护师……测练题:关于软件系统开发方法,你理解了哪些_________?构件化程序的编程单位扩大为构件和连接件(框架)(一个构件是将若干个对象/类封装后的程序体,其他对象以接口的形式来访问构件中的对象/类及其函数)。【类比建筑技术:是工业化批量化构造复杂建筑的技术】服务化程序的编程单位扩大为服务和服务总线(一个服务,是构件对外开放的标准的接口,而服务总线是服务能够被调用和执行的基础设施)。【类比建筑技术:是建立互联互通建筑的技术】面向对象程序的编程单位扩大为对象/类和消息传递(一个对象就是若干函数被封装后的程序体)。【类比建筑技术:是构造复杂建筑的技术】结构化程序的编程单位是函数和函数调用(一个函数就是一组数据结构基础上的算法表达)。【类比建筑技术:是盖平房的技术】ABCD提交投票最多可选4项结构化程序设计,也被称为面向过程的程序设计基本语法要素:变量与常量、表达式、语句与函数。主函数main():主程序函数定义:定义一个新函数,即自己编写的程序段落函数调用:调用一个函数完成一个计算结构化程序设计程序的基本语法要素为控制复杂性,先以函数来代替琐碎的细节,着重考虑函数之间的关系,以及如何解决问题在前一阶段考虑清楚后或编制完成后,再编写其中的每一个函数。而函数的处理同样采取这种思路结构化程序设计传统程序构造及其表达方法----由粗到细上一层次的函数依据下层函数来编写,确认正确后再转至更上层问题处理首先编写一些基础性的函数,并确定其正确后,再处理上一层次的问题。结构化程序设计传统程序构造及其表达方法----也可以由细到粗程序

是若干函数的集合;函数

是若干语句的集合,是具有先后次序的若干语句的集合。函数=算法+数据结构系统=函数+函数调用结构化程序设计再看:什么是程序?测练题:你是如何理解结构化程序的,请选择_________?结构化程序可以自底向上地构造—即先完成基础功能,将基础功能实现为一个个函数;然后再用这些函数构造更为复杂的功能;一层层扩展功能完成最终系统的构造。结构化程序的核心是函数的编写,而函数就是定义了数据结构后,对该数据结构数据的处理算法,算法就是一条条程序语句。因此可以说,函数就是数据结构+算法。结构化程序可以自顶向下地构造—即先将细节性功能定义为一个函数名,然后用函数名的调用来构造复杂功能,待处理完复杂功能后,再来编写细节性功能的程序(即编写该函数的函数体),一层层细化,直到能够被实现。结构化程序的编程单位是语句和函数,函数是将若干语句封装后形成的以函数名来调用的语句的集合。ABCD提交投票最多可选4项现实世界(或者说系统)是由可区分的“对象”构成的…(从系统来看)对象可被看作是一个个具有某种功能/行为的个体

“(从软件系统来看)对象可被看作是一个个可执行某种程序的个体”--对象的“独立性/自主性”对象自己执行自身的动作而无需其他对象干预…“对象自己执行自身的程序而独立于其他对象…”--对象之间的“交互性”面向对象的核心概念为什么要理解面向对象的思维“对象”是相互可区分的一个个“个体”每一对象有唯一的“对象标识”区分于其他对象“对象”是有状态属性的个体每一对象有一组状态属性,即相当于一组数据来刻画其自身的状态信息--对象的属性“对象”是有独立行为或功能的个体每一对象有自己的可以执行的程序--对象的函数(又称为方法)“对象”在接收到需服务的请求时,可为其他对象提供服务…每一对象有一组其可以处理的消息—对象的消息,而响应“消息”的则是对象的函数(或称方法)。张三李四王五面向对象的核心概念核心概念:对象有些对象具有相似的特性描述,组成“类”。各自独立运行的类的实例同类对象的共性形式或者说对象的类型张三王五类是对象的抽象或称对象的“类型”,定义了同类型对象的框架(名字、属性和功能);对象是类的实例,是实际运行的个体。类对象对象面向对象的核心概念核心概念:类与对象“对象”可隐藏其内部的各种细节对象可将其内部的属性和函数进行隐藏,即所谓的“封装”。对外只通过消息进行交互。苹果

数据:常量、变量一箱苹果----对象A对象A的函数装入一个苹果(),取出一个苹果()移动一箱苹果()一车苹果----对象B对象B的函数行驶(),暂停()装载(),卸载()一车苹果.一箱苹果.一个苹果对象B.对象A.常量对象B.对象A.变量对象B.对象A.函数();对象B.函数();面向对象的核心概念核心概念:封装消息是对象之间传递的内容,如指示、打听、请求……消息是对象之间交互的唯一的内容消息是对象.函数()的调用和执行张三王五请问...(消息)您问…的解答是…(消息)Call王五.回答身高()Execute:

王五.回答身高(){Return(“身高是1.64m”);}面向对象的核心概念核心概念:消息事件是外界产生的一种能够激活对象功能的特殊消息。当发生事件后将给所涉及对象发送一个消息,对象便可执行相应的功能---事件驱动;有人敲门电话铃响张三.电话铃响(){//不接;自动回复在上课;…}张三.有人敲门(){//暂停课程;询问并处理;…}张三.其他(){…….}面向对象的核心概念核心概念:事件继承:一个对象(类)继承另一个对象(类)的属性与函数多态:不同对象对同一消息的不同响应,即允许方法重名。有:虚函数型多态—子类可以重定义父类的函数;重载型多态--同一函数名的函数参数可以有不同的形式。……注意:这些特性不急于在本门课程中理解,本门课程要理解这种面向对象的思维…学习面向对象的思维不仅仅是理解这些概念,更重要的是运用其进行构造…计算机语言如何实现面向对象的思维呢?面向对象的核心概念其它核心概念类与对象,消息与事件,函数或称方法类一个个对象面向对象的程序设计面向对象程序设计的基本要素对象占用相对独立的内存区域怎样实现“若干同类别对象,虽有相同的程序,但却处理不同的数据而产生不同的结果呢?”两方面技术:一是封装,二是对象的自动产生与运行。对象:a1对象:a2类:A1数据D1,D2;函数f1(),f2();a1.D1,a1.D2;a1.f1();a1.f2()a2.D1,a2.D2;a2.f1();a2.f2()对象:a11a11.D1,a11.D2;a11.f1();a11.f2()数据结构封装了若干个变量;函数封装了若干行的语句;类/对象封装了若干数据结构和函数。定义创建与运行面向对象的程序设计面向对象程序的技术本质类:A1数据D1,D2;函数f1(),f2();Class

A1

//定义一个类{intD1,D2

//定义变量

intf1();

//定义类中的函数

intf2(); //定义类中的函数

intf1() //类A1的函数f1的程序{//f1的程序语句块}intf2() //类A1的函数f2的程序{//f2的程序语句块1a4=newA2;

//创建类A2的对象a4

//f2的程序语句块2D1=calla4.f3();//调用另一对象的某一函数

//f2的程序语句块3

}}定义“类”,即相当于定义一系列对象的对象结构。用“类”,创建一个个对象对象之间进行交互面向对象的程序设计像定义函数一样,定义“类”对象:a1对象:a2类:A1数据D1,D2;函数f1(),f2();a1.D1,a1.D2;a1.f1();a1.f2()a2.D1,a2.D2;a2.f1();a2.f2()对象:a11a11.D1,a11.D2;a11.f1();a11.f2()Main(){intM1,M2;

a1=newA1; //创建类A1的对象a1

a2=newA1; //创建类A1的对象a2a11

=newA1;//创建类A1的对象a11

M1=calla1.f2();

//执行对象a1的f2的程序

M2=calla2.f1();

//执行对象a2的f1的程序

a1.D1=15;

//对象a1的数据D1被赋值为15

a2.D1=20;

//对象a2的数据D1被赋值为20

……}面向对象的程序设计对象的创建与运行对象:a1对象:a2类:A1数据D1,D2;函数f1(),f2();a1.D1,a1.D2;a1.f1();a1.f2()类:A2数据D3,D4;函数f3(),f4();a2.D1,a2.D2;a2.f1();a2.f2()对象:a3对象:a4a3.D3,a3.D4;a3.f3();a3.f4()a4.D3,a4.D4;a4.f3();a4.f4()对象:a11a11.D1,a11.D2;a11.f1();a11.f2()对象占用相对独立的内存区域定义创建与运行面向对象的程序设计不同类的不同对象对象:a1对象:a2a1.D1,a1.D2;a1.f1();a1.f2()a2.D1,a2.D2;a2.f1();a2.f2()对象:a4a4.D3,a4.D4;a4.f3();a4.f4()Calla4.f3();Calla4.f3();Main程序Calla1.f2();Calla2.f1();对象:a11a11.D1,a11.D2;a11.f1();a11.f2()面向对象的程序设计对象的交互,即消息的传递ClassA1

{intD1,D2;

intf1(intqty)

{inttemp;……//f1的程序语句块}}intA1::f2()

{

//f2的程序语句块}intf2(){//f2的程序语句块

}Main()

{…a1=newA1;a2=newA1;a1.D1=M1;callf2();calla1.f1(M1);calla2.f1(M2);}Main(){intD1,D2

intsum;sum=D1;callf1(sum);callf2();}intf1(intqty)

{inttemp;temp=qty*qty;return(qty);

//f1的程序语句块}intf2()

{//f2的程序语句块}独立定义的函数全局变量局部变量类中定义的函数类中定义的函数独立定义的函数用类产生对象调用对象的函数调用独立的函数定义“类”结构化程序与面向对象程序的比较比较对象:a1对象:a2类:A1数据D1,D2;函数f1(),f2();a1.D1,a1.D2;a1.f1();a1.f2()a2.D1,a2.D2;a2.f1();a2.f2()对象:a11a11.D1,a11.D2;a11.f1();a11.f2()(左侧图)—具体语言的物理实现方案之1;(右侧图)—具体语言的物理实现方案之2对象:a1对象:a2类:A1数据D1,D2;函数f1(),f2();a1.D1,a1.D2;a2.D1,a2.D2;对象:a11a11.D1,a11.D2;f1()f2()数据和函数都随着对象产生数据随着对象产生,但函数公用。代入不同对象的数据即为不同对象服务结构化程序与面向对象程序的比较“类”和“对象”的不同实现思路测练题:关于对象和类,你的理解是_________?对象和变量相比,变量就是用变量名访问的用于保存数据一组存储单元,而对象是用对象名访问的用于保存数据和程序的一组存储单元类是一种类型(尽管其中有程序代码),是不能直接执行的。类中的程序若要被执行,就需要用类产生一个对象(即为其分配一组存储单元),由对象来执行相应的程序。对象就好比是变量,而类就好比是变量的类型。对象是一个个具体的个体,而类是对这些个体的一个抽象,是定义同类型对象的一个框架。ABCD提交投票最多可选4项测练题:关于对象和类,你的理解是_________?对象有一组操作,来刻画对象的不同功能,其是用消息和方法来刻画操作的对象有一组消息和方法,消息是函数的声明/函数形式,而方法是函数体/程序体。对象有一组属性,用来刻画对象的各种特性对象有一个对象标识,来区分一个个具体的个体ABCD提交多选题1分测练题:关于对象和类,你的理解是_________?不同对象的属性名可能是一样的(同“类”对象),但其属性值却是不同的;不同对象的函数名可能是一样的(同“类”对象),但其程序体(或其程序语句—静态的)却是不同的。不同对象的属性名可能是一样的(同“类”对象),但其属性值却是不同的;不同对象的函数名可能是一样的(同“类”对象),但其程序功能(或其程序语句—动态的)却是不同的,即语句虽相同但处理的数据却是不同的。一个对象可以产生很多个类,类和类之间进行信息传输和函数调用。一个类可以产生很多的同类的对象,对象和对象之间进行信息传输和函数调用。ABCD提交多选题1分控件对象类窗口对象属性设置窗口工程窗口窗体对象设计窗口窗体对象控件对象对象的事件

驱动程序窗口(目标)软件系统用户怎样构造呢?头大了耶…:(基于对象框架构造软件--一种可视化编程示例软件系统的一种构造环境:VisualBasicVisualBasic提供了一批部分功能已经实现的对象(对象框架),选择合适的对象来构造应用程序对象框架对象标签对象文本框对象按钮对象窗体对象基于对象框架构造软件--一种可视化编程示例对象框架vs.对象vs.界面/外观设置对象的属性,调整界面的布局,以反映应用程序的语义如何在属性设置窗口找到相应对象的属性?不同对象有哪些属性?属性的含义是什么?data1.Name=“data1”data1.Text=用户输入的data2.Name=“data2”data2.Text=用户输入的data3.Name=“data3”data3.Text=期望输出的add.Name=“add”add.Caption=“clickhereafterinputdata”基于对象框架构造软件--一种可视化编程示例对象:名字vs.属性vs.外观为不同对象的不同操作,编写不同的程序,以完成不同的功能如何在代码窗口找到相应对象相应事件的函数?怎样将对象在窗口中的信息传递到代码中?data1.Name=“data1”data1.Text=用户输入的data2.Name=“data2”data2.Text=用户输入的data3.Name=“data3”data3.Text=期望输出的add.Name=“add”add.Caption=“clickhereafterinputdata”add_Click()对象_事件()基于对象框架构造软件--一种可视化编程示例对象:名字vs.事件/消息vs.程序通过对象的名字(唯一标识)来建立联系窗体对象控件对象标签1按钮对象标签2标签3文本框1文本框2文本框3对象2.Name=“对象2”对象2.属性=“xxxxxx”对象1_事件(){//“对象2.属性”的赋值与获取;

//“对象x.属性k”的赋值与获取}基于对象框架构造软件--一种可视化编程示例窗口-界面vs.属性窗口-属性vs.代码窗口-函数开发/编辑状态下的应用程序运行状态下的应用程序基于对象框架构造软件--一种可视化编程示例开发/编辑vs.调试/运行+-

plus.Name=“plus”plus.Caption=“+”min.Name=“min”min.Caption=“-”prod.Name=“prod”prod.Caption=“

”div.Name=“div”div.Caption=“

”基于对象框架构造软件--一种可视化编程示例程序构造:增加控件对象+-

PrivateSubplus_Click()data3.Text=Str$(Val(data1.Text)+Val(data2.Text))EndSubPrivateSubmin_Click()data3.Text=Str$(Val(data1.Text)-Val(data2.Text))EndSubPrivateSubprod_Click()data3.Text=Str$(Val(data1.Text)*Val(data2.Text))EndSubPrivateSubdiv_Click()data3.Text=Str$(Val(data1.Text)/Val(data2.Text))EndSubplusminproddivdata1data2data3基于对象框架构造软件--一种可视化编程示例程序构造:为新控件编写程序代码基于对象框架的构造软件系统对象框架基于对象框架构造软件--一种可视化编程示例可视化编程:基于对象框架的软件构造测练题:关于对象和类,对象和对象框架,你能够理解的是_________?用“类-对象”编写程序,是先用类定义一个对象,然后再由对象进行函数调用和数据处理。用“对象框架-对象”编写程序,其背后会先用对象框架对应的类定义一个对象后将部分已被实现的功能复制到该对象,程序员只需补足其所关心的部分即可。对象框架,通常定义了相应对象的函数及其调用方法(一般采取事件驱动的方式来调用),即一个对象能识别哪些事件是已经设计好的,对于这些事件系统自动形成一套如“对象_事件()”的函数调用机制。程序员只要将其程序放置在相应的“对象_事件()

”函数中,便能被调用和执行。对象框架本质上是一个对象,部分功能已被实现,部分功能留给程序员来实现,用对象框架产生一个对象,即相当于由一个对象通过复制产生另一个对象。类是对象的类型,用类来产生对象,即在内存中分配一块内存用于装载该对象的数据和程序(类中的程序在产生对象后,被装载到对象的内存区中成为了对象的程序)。ABCD提交投票最多可选4项data2.Text对象名.属性名该对象的名字为data2,其有一个属性为Textadd_Click()对象名_事件名()该对象的名字为add,其有一个事件为Click业务处理程序与用户界面程序紧耦合在一起构件化-服务化思想的简单介绍紧耦合的结构框架将软件的各部分分离实现,以实现灵活组合

OKButton_ClickCancelButton_ClickGenButton_ClickProcess1(){…}Process2(){…}

Process3(){…}Case:OKButton_ClickProcess1();Case:CancelButton_ClickProcess2();Case:GenButton_ClickProcess3();界面要素及其操作业务处理程序界面要素及其操作与业务处理程序的映射ViewModelController构件化-服务化思想的简单介绍三组件分离的结构框架OKButton_Click(){Process1();}ViewCancelButton_Click(){Process2();}GenButton_Click{Process3();}系统1构件流程+接口1系统2构件流程+接口2Call接口2()Interface一个构件A调用另一个构件B,需要在构件A编写时知道构件B的接口构件化-服务化思想的简单介绍构件/组件之间的交互通过接口与接口的调用来实现系统1构件流程+接口1系统2构件流程+接口2通过ESB调用相应的Service开放的接口,即:Service服务总线ESB:EnterspriseServiceBus(注册、部署、管理、执行Service)获取要使用的Service注册WebService一个系统在开发时可调用未来的服务一个系统的服务可以被未知的系统调用构件化-服务化思想的简单介绍由构件/组件的“接口”到“服务”服务1服务nAB服务1服务m服务1(需求)服务总线:

控制并切换<服务1(需求)>是调用构件A的服务1还是构件B的服务1系统=服务

+服务总线;服务=构件的公共标准的接口服务1(需求)服务1(需求)构件化-服务化思想的简单介绍面向服务的软件系统构造ESB:EnterpriseServiceBus后端处理逻辑数据访问层数据源层UI界面前端处理逻辑调用层处理UI界面前端处理逻辑调用层处理WebService后端处理逻辑数据访问层数据源层WebService后端处理逻辑数据访问层数据源层WebService后端处理逻辑数据访问层数据源层UI界面前端处理逻辑调用层处理WebServiceWebServiceWebService……注册与部署WSDL程序库WS注册表发现并反馈消息传输协议转换协议转换访问绑定访问绑定路由控制路由控制BPEL引擎安全控制服务监控其他…

ESB传统业务构件的开发服务化业务构件的开发面向服务的软件系统构造方法(4)SOA&ESB?ESB面向服务的软件系统构造方法从软件,走向软件工程,走向软件定义一切面向服务的软件系统构造方法(4)SOA&ESB?从软件构造走向软件定义一切产生-维护-演化客户:我需要一软件客户期望的软件软件模型与建模方法(方法论)软件开发与维护软件生命周期(过程)软件工程环境(工具)软件环境(运行支撑)多租户云化虚拟化并行化分布化面向用户的规模可变面向系统的大规模调度处理服务不间断化自演化海量用户大规模异构数据互操作与协同化软件业务化软件定义一切(软件定义无人车、软件定义无人机、软件定义机器人、软件定义网络、软件定义数据中心…)思维:解耦==分层==中间件==服务化==虚拟化==自演化第10讲软件思维:结构-对象-组件-服务【自学&拓展】哈尔滨工业大学计算学部教学委员会主任国家教学名师战德dechen@第10讲软件思维:结构-对象-组件-服务【自学&拓展】一、面向对象思维的表达方法二、基于组件/构件的软件系统构造方法三、面向服务的软件系统构造方法UML是什么?UnifiedModelingLanguage,统一建模语言面向对象程序分析、设计与构造的一种表达方法;包含了类图/对象图、次序图、状态图、用例图等图形化的表达方法;便于人们交流分析设计的成果;软件工程领域的一种共用的表达方法;软件工程专业学生必须要掌握的方法。面向对象思维的表达方法统一建模语言-UML类1变量及其类型函数名()类2变量及其类型函数名()继承关系类3变量及其类型函数名()组合关系类名字变量及其类型函数名()类4变量及其类型函数名()聚合关系继承关系组合关系聚合关系对象名字:类名字变量及其类型函数名()面向对象思维的表达方法:类图/对象图UML类图/对象图:描述类及其之间关系的一种图示化方法图书+图书号-总数量-在库数量-借阅者出借()归还()读者+读者证号-借阅数量-图书借书()还书()涉及到Class读者 {…借书(图书号){anObject=GetObject(图书号);

callanObject.出借(读者证号);借阅数量=借阅数量+1;图书=图书+{图书号

};}还书(图书号){anObject=GetObject(图书号);callanObject.归还(读者证号);借阅数量=借阅数量-1;图书=图书-{图书号

};} }Class图书 {…出借(读者证号){

在库数量=在库数量-1;借阅者=借阅者+{读者证号}}归还(读者证号){在库数量=在库数量+1;借阅者=借阅者-{读者证号}} }【示例】图书借阅管理(简化版)一种图书被哪些读者借阅;一位读者借阅了哪些图书可以这样构造面向对象思维的表达方法示例用面向对象思维理解现实世界图书+图书号-总数量-在库数量-借阅者出借()归还()读者+读者证号-借阅数量-图书借书()还书()涉及到数据库:图书+图书号:B1-总数量:5-在库数量:4-借阅者:{R1}出借()归还()操作系统:图书+图书号:B2-总数量:5-在库数量:2-借阅者:{R1,R2,R3}出借()归还()离散数学:图书+图书号:B3-总数量:5-在库数量:3-借阅者:{R1,R2}出借()归还()张三:读者+读者证号:R1-借阅数量:3-图书:{B1,B2,B3}借书()还书()李斯:读者+读者证号:R2-借阅数量:2-图书:{B2,B3}借书()还书()王五:读者+读者证号:R3-借阅数量:1-图书:{B2}借书()还书()表达的是这样的意思面向对象思维的表达方法示例Class读者

{借书(图书号){anObject=GetObject(图书号);callanObject.出借();借阅数量=借阅数量+1;call借阅.借增(读者证号,图书号);}还书(图书号){anObject=GetObject(图书号);callanObject.归还();借阅数量=借阅数量-1;

call借阅.还增(读者证号,图书号);} }Class图书

{出借(){

在库数量=在库数量-1;}归还(){在库数量=在库数量+1;} }Class借阅

{借增(读者证号,图书号){新增一记录;设置:“借还标志”=借出“读者证号”=读者证号;“图书号”=图书号; “借阅日期”=当前日期; }还增(图书号,图书号){新增一记录;设置:“借还标志”=归还;“读者证号”=读者证号;“图书号”=图书号; “借阅日期”=当前日期; } }图书+图书号-总数量-在库数量出借()归还()读者+读者证号-借阅数量借书()还书()涉及到借阅+序号-借阅日期-借还标志-读者证号-图书号借增()还增()涉及到还可以这样构造面向对象思维的表达方法示例Application…Create()Open()Activate()Deactivate()Close()Destroy()Window...Create()Open()Activate()Deactivate()Close()Destroy()聚合关系CtrButton...Create()Getfocus()Click()Dblclick()Lostfocus()Destroy()CtrText...Create()Getfocus()Click()TextChange()Lostfocus()Destroy()组合关系组合关系组合关系其他的控件对象类可以这样表达“窗口”面向对象思维的表达方法示例【示例】GUI窗口(简化版)用面向对象思维理解现实世界Application…Create()Open()Activate()Deactivate()Close()Destroy()Window...Create()Open()Activate()Deactivate()Close()Destroy()聚合关系CtrButton...Dblclick()CtrText...TextChange()组合关系其他的控件对象类Control...Create()Getfocus()Click()Lostfocus()Destroy()1..m也可以这样表达“窗口”面向对象思维的表达方法示例状态1状态1下可以执行的动作()状态2状态2下可以执行的动作()使状态1改变为状态2的动作()或条件面向对象思维的表达方法:状态图UML状态图:描述对象/类的状态变化关系的一种图示化方法可出借出借()归还()已借完归还()当在库数量<=0时已认证借书()还书()退出()限制借阅还书()退出()当借阅数量>=5时待认证登录()浏览()登录()且认证通过退出()当借阅数量<5时当在库数量>0时图书读者退出()面向对象思维的表达方法示例UML状态图示例对象a:类1消息对象b:类1Call对象b的函数()类1的对象a发送一个消息给类1的对象b,即:对象a调用了对象b的一个函数():类1消息:类2Call类2的对象的函数()类1的某一对象(注意类前面的冒号,表示该框中是一个对象)发送一个消息给类2的某一对象.即:类1的对象调用了类2某对象的一个函数()面向对象思维的表达方法:序列图UML序列图(又称次序图):描述类的对象之间交互关系的一种图示化方法【示例】图书借阅管理

某一“读者”对象与某一“图书”对象的交互过程:Application:读者:图书当有读者登录时,创建读者对象当新增图书时,创建图书对象Call借书()Call出借()Call还书()Call归还()你是否还有疑问呢?对象什么时候开始存在的?对象什么时候消亡呢?“图书”或“读者”对象消亡,则其保存的变量的信息是否也丢失了呢?深入学习(1)面向对象的程序设计语言(2)统一建模语言(3)软件设计模式(4)软件体系结构(5)软件工程面向对象思维的表达方法示例UML序列图(又称次序图)示例应用程序就是一系列对象,及其属性和函数的集合对象框架对象标签对象文本框对象按钮对象窗体对象理解对象框架的构造对象框架vs.对象Object1:Window...…Object1_Open()…add:CtrButtonadd.Name=“add”add.Captionadd_Click(){…}data1:CtrTextdata1.Name=“data1”data1.Textdata1_TextChange(){…}组合关系data2:CtrTextdata2.Name=“data2”

data2.Textdata2_TextChange(){…}data3:CtrTextdata3.Name=“data3”

data3.Textdata3_TextChange(){…}label1:CtrLabellabel1.Name=“label1”label1.Captionlabel2:CtrLabellabel2.Name=“label2”label2.Captionlabel3:CtrLabellabel3.Name=“label3”label3.Caption理解对象框架的构造用UML类图理解:应用程序vs.窗体对象vs.控件对象程序员无需关心的部分:事先做好,直接使用程序员可能关心的部分:留出相应位置,允许程序员编写和修改程序员关心的部分:在相应位置,编写和修改对象框架对象理解对象框架的构造将同类别对象的共性内容做成一个对象框架anyButton:CtrButtonanyButton.Name=“anyButton”

anyButton.Caption=“”anyButton_Click(){//留给应用程序员编写}OKButton:CtrButtonOKButton.Name=“OKButton”

OKButton.Caption=“确定”OKButton_Click(){//【确定】按钮的程序}CancelButton:CtrButtonCancelButton.Name=“CancelButton”CancelButton.Caption=“取消”CancelButton_Click(){//【取消】按钮的程序}GenButton:CtrButtonGenButton.Name=“GenButton”

GenButton.Caption=“普通按钮”GenButton_Click(){//【普通按钮】的程序}IsacopyIsacopyIsacopy对象框架对象理解对象框架的构造用UML类图理解:对象框架Window...…Open()…CtrButton...…Click()…CtrText...…TextChange()…组合关系组合关系Window类的objectnWindow类的object1Window类的object2CtrButton类的object1“确定”CtrButton类的object2“取消”CtrButton类的object3“普通按钮”理解对象框架的构造用UML类图理解:窗体对象(类)与控件对象(类)Application…Create()Open()Activate()Deactivate()Close()Destroy()Window...Create()Open()Activate()Deactivate()Close()Destroy()聚合关系CtrButton...Create()Getfocus()Click()Dblclick()Lostfocus()Destroy()CtrText...Create()Getfocus()Click()TextChange()Lostfocus()Destroy()组合关系组合关系组合关系其他的控件对象类理解对象框架的构造用UML类图理解:应用程序的结构(类图)Object1:Window...…Object1_Open()…add:CtrButtonadd.Name=“add”add.Captionadd_Click(){…}data1:CtrTextdata1.Name=“data1”data1.Textdata1_TextChange(){…}组合关系data2:CtrTextdata2.Name=“data2”

data2.Textdata2_TextChange(){…}data3:CtrTextdata3.Name=“data3”

data3.Textdata3_TextChange(){…}label1:CtrLabellabel1.Name=“label1”label1.Captionlabel2:CtrLabellabel2.Name=“label2”label2.Captionlabel3:CtrLabellabel3.Name=“label3”label3.Caption理解对象框架的构造用UML类图理解:应用程序的结构(对象图)应用程序1的消息循环:循环接收属于应用程序1的消息Windows系统的消息循环:循环接收属于操作系统的消息消息1消息2消息m应用程序2应用程序n应用程序1应用程序2的消息循环:循环接收属于应用程序2的消息消息1消息2消息m应用程序n的消息循环:循环接收属于应用程序n的消息用户产生的事件或其他应用程序发出的消息依据应用程序队列和消息确定向哪个应用程序发送消息1消息2消息m依据消息和对象控制序列找到对应该消息的对象程序执行之对象2对象n对象1对象2对象n对象1134267消息循环是一个消息管理程序。它能够接收各种消息,并将消息传递给各种相关对象,调用其事件驱动程序予以处理。是对象之间调用关系的一种处理机制。理解结构框架GUI(图形用户界面)的核心思想:消息循环窗口对象按钮对象一类控件对象文本框对象--一类控件对象将不同类别对象之间的关系做成一个结构框架。结构框架是按照某一种体系结构(Architecture)实现的,用于连接、装配各种对象形成系统的一套程序理解界面如何做!理解界面的要素与后面的程序如何衔接!可视化框架自动产生与运行理解结构框架结构框架:各种对象之间的调用关系:Application:Window:CtrButton:CtrTextCreate()Create()Create()Create()Open()Open()Getfocus()Activate()Lostfocus()DeActivate()DeActivate()Close()Close()……中间过程还有很多消息传送,在此被忽略……理解结构框架用UML序列图理解结构框架(可视化的)对象框架与结构框架为什么没有anobject=newsomeCLASS;理解结构框架怎样构造应用程序的结构框架与对象框架由面向对象程序构造对象框架与结构框架(可视化的)对象框架与结构框架理解结构框架怎样构造应用程序的结构框架与对象框架对象类对象框架基于对象框架的构造软件系统面向对象的程序设计软件工程UML理解结构框架用面向对象程序设计语言构造vs.基于对象框架的软件构造是解决复杂环境下软件规模与复杂性的一种手段是通过分工实现标准化-流程化进而解决批量化软件生产的手段使软件工程步向成熟发展的轨道1386年开工-1897年完工500余年时间建一座…X年建一栋,一年建N栋,…基于组件的软件构造基于组件/构件的软件系统构造为什么需要基于组件/构件的开发基本的“构件”是什么?这些“构件”怎样连接在一起?“连接件”“构件”如何来建造?“连接件”如何来建造和连接?基于组件/构件的软件系统构造(2)什么是组件/构件?基于组件/构件的软件系统构造类比建筑中的构件与结构应用程序组件的接口组件--接口的实现InterfaceMInterfaceN对象C对象A对象BInterfaceBInterfaceA调用OtherInterfaceA调用组件/构件:可独立发布的机器程序文件;将若干对象及内部关系进行封装所形成的一个可执行程序文件。【接口与实现分离】---“接口”是对象或者组件的通信协议;---“实现”是对象或者组件的内部构造细节。【解耦】尽可能地消除软件不同部分之间的联系基于组件/构件的软件系统构造软件中的构件/组件应用程序InterfaceCInterfaceD对象C对象A对象BInterfaceBInterfaceA调用OtherInterfaceA调用管理并运行组件的容器---中间件,如Apache的Tomcat、IBM的websphere、BEA的WebLogic等组件的接口组件--接口的实现基于复用的软件开发==用可重复使用的软件组件开发应用程序面向复用的软件开发==开发可重复使用的软件组件基于组件/构件的软件系统构造支持软件组件/构件运行的中间件ApplicationFrameworkApplicationBody按组件连接协议进行Component装配与运行ClassA::Function1(){…//源程序代码…}Component1ClassB::Function2(){…//源程序代码…}Component2ClassC::Function3(){…//源程序代码…}Component3ClassC::Function3(){//运行态程序代码}Component3ClassB::Function2(){//运行态程序代码}Component2ClassA::Function1(){/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论