Ooaduml+与xml+串讲.docx
- 文档编号:12641747
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:24
- 大小:27.65KB
Ooaduml+与xml+串讲.docx
《Ooaduml+与xml+串讲.docx》由会员分享,可在线阅读,更多相关《Ooaduml+与xml+串讲.docx(24页珍藏版)》请在冰豆网上搜索。
Ooaduml+与xml+串讲
Ooad_uml与xml串讲
一.面向对象
通过封装、继承、多态,把程序的耦合度降低,使程序灵活、容易修改、容易复用。
面向对象=对象+类+消息+继承+多态
面向对象方法是一种把面向对象的思想运用于软件开发过程,指导开发活动的系统方法,包括分析、设计和实现等活动
软件开发组越大,组中每个成员的生产率就越低
--PhilippeKahn,Borland
Ln=15000/(n^-3)(LOC/year)
构造大型软件不能靠堆人
敏捷开发:
1.思路先行//先用注释把思路记录下来
2.实现随后
可维护性:
预见需求(预见多年后的事)
可重用:
代码可重用(最低级别):
粒度:
方法(常用代码块),类,包,组件(类库)
设计的可重用:
框架(半成品,如Hibernate);产品(开发软件);算法、设计模式
分析的可重用(最高级别,见不到代码):
文档、规范、标准(ISO:
CMM,CMMI)
可扩展性:
二.UML图
类(class)用矩形框表示,分三层
第一层:
类名,抽象类用斜体字
第二层:
类的特性:
字段和属性
第三层:
类的操作:
方法或行为
方法前的符号:
“+”表示public,“-”表示private,“#”表示protected
接口:
右边的“飞翔”
顶端有<
接口的另一种表示法:
俗称棒棒糖表示法,就是类上面的一根棒棒糖(圆圈+实线)
圆圈旁为接口名称,接口方法在实现类中出现
继承:
用空心三角+实线
实现接口:
空心三角+虚线
类与对象之间的关系(6种):
关联Association:
一个类受另一个类影响(实线)
聚合关联Aggregation:
弱'拥有'关系,A对象可以包含B对象,但B不是A的一部分(空心菱形+实线箭头)[DPE]
(DPE表示这句话来自《设计模式》)
组合关联Composition:
(也叫合成,组成)是一种强的‘拥有’关系,体现严格的部分和整体的关系,
部分和整体的生命周期一样[DPE](实心菱形+实线箭头)
组合图形的基数:
表明这一端的类可以有几个实例,(一只鸟有两个翅膀)如果有无数个实例,则用n表示
关联关系、聚合关系也可以有基数
依赖Dependency:
一个类需要另外一个类(X需要Y,则X的修改Y也要跟着修改)(虚线箭头)
泛化(继承)(实心菱形+实线)
实现(实心菱形+虚线)
UML4+1图
1:
用例图描述系统中有哪些用户可用的功能
4:
逻辑图将问题中的一些名词提取出来,形成系统中对应的类,表示之间的关系。
过程图表示系统对象间的交互
实现图系统中组件与组件之间交互
部署图软件系统真实运行过程的物理描述
静态(系统结构):
类图
对象图
构建图
部署图
动态(系统行为):
顺序图(时序图)
协作图
状态图
活动图
用例图
三.面向对象的7大基本设计原则
程序设计:
没有最好,只有最适合。
寻找平衡点。
1.LSP(TheLiskovSubstitutionPrinciple,替换原则)
父类出现的地方,子类都可出现。
子类或实现类与父类都是可以互换的。
子类不能添加任何父类没有的附加约束
子类对象必须可以替换父类对象
2.OCP(TheOpen-ClosePrinciple,开闭原则)
要关联抽象,不要关联具体,抽象可扩展。
扩展是开放的,更改是封闭的
3.SRP(TheSingleResponsibilityPrinciple,单一职责原则)
依赖不同的具体类,不要将不相关的方法放到一个具体类中,然后具体类再关联。
一个类,应该仅有一个引起它变化的原因
当需求变化时,该变化会反映为类的职责的变化(如果有多个职责,引起变化的原因就会有多个)
4.ISP(TheInterfaceSegregationPrinciple,接口隔离原则)
具体类不要实现无关接口中的方法,应使用具体类实现多个接口。
避免肥接口,以一个类实现多个接口,而各客户仅仅获知必须的接口
本质:
使用多个专门的接口比使用单一的接口好
一个类对另一个类的依赖性应当最小化
避免接口污染(InterfacePollution)(使用不必要的功能)
5.DIP(TheDependencyInversionPrinciple,依赖倒置原则)
高层依赖于抽象,底层继承/实现于抽象。
高层模块不应该依赖于低层模块,二者都应该依赖于抽象
细节应该依赖于抽象,而抽象不应该依赖于细节
针对接口编程,不是针对实现编程
6.CARP(Composite/AggregateReusePrinciple,组合/聚合复用原则)
尽量使用组合/聚合,而不是使用继承来达到复用目的
继承的缺点:
会带来不必要的方法
组合/聚合的解决方案
组合:
部分的更改会影响整体的生命
***:
部分的更改对整体的影响不大
7.LoD(LawofDemeter,迪米特法则)
类间最少通信原则,采用中间类。
也称最少知识原则。
一个对象或模块应该和其它对象和模块尽量少的通信
GoF(GangofFout)23种经典设计模式
创建型结构型行为型
类FactoryMethod工厂方法Adapter_ClassInterpreter
TemplateMethod
对象AbstractFactory抽象工厂Adapter_ObjectChainofResponsibility
BuilderBridgeCommand
Prototype原型CompositeIterator
Singleton单例Decorator装饰Mediator
FacadeMemento
FlyweightObserver
ProxyState状态
Strategy
Visitor
单例模式:
当多个对象需要共享同一个对象时;
原型模式:
对扩展开发,对修改关闭;
工厂模式:
客户需要某个产品,能够根据客户要求取得产品给客户;
状态模式:
当需要对某个对象内部状态改变时,使用;
装饰模式:
当需要对某个对象动态添加新功能时,可以用;
适配器模式:
只需要对接口中的一小部分方法重新定义,又不希望将接口中的所有方法实现,
这时可以使用;
观察者模式:
当主题对象改变时,需要通知所有的观察者,这时可以使用;
命令模式:
将用户发出命令以对象形式传递,通过参数可改变命令对象的状态;
四.XML(eXtensibleMarkupLanguage)是万维网联盟(WorldWideWebConsortiumW3C)定义的一种可扩展标志语言。
可扩展性指允许用户按照XML规则自定义标记(tags标签)。
强项:
轻松表达多层结构的数据;可扩展。
优点:
平台无关,语言无关。
设计目标是描述数据并集中于数据的内容,与显示分离。
提醒:
不能用XML来直接写网页。
即便是包含了XML数据,依然要转换成HTML格式才能在浏览器上显示。
语法规则:
XML文件有且仅有一个根标记,其他标记必须封装在根标记中,文件的标记必须形成树状结构。
大小写敏感。
标记的属性必须用""或''括起来。
XML细节:
一、声明
大多数XML文档以XML声明作为开始,它向解析器提供了关于文档的基本信息。
建议使用XML声明,但它不是必需的。
如果有的话,那么它一定是文档的第一行内容。
如:
xmlversion="1.0"encoding="UTF-8"standalone="no"?
>
声明最多可以包含三个名称-值对(许多人称它们为属性,尽管在技术上它们并不是)。
xml问号与xml之间不能有空格。
1)version是使用的XML版本:
1.0,1.1
2)encoding是该文档所使用的字符集。
该声明中引用的ISO-8859-1字符集包括大多数西欧语言用到的所有字符。
默认字符在UTF-8字符集中,这是一个几乎支持世界上所有语言的字符和象形文字的Unicode标准。
3)standalone(可以是yes或no)定义了是否孤立处理该文档。
如果XML文档没有引用任何其它文件,则可以指定standalone="yes"。
如果XML文档引用其它描述该文档可以包含什么的文件(如DTD),则standalone="no"。
默认值为"no"
二、标记
左尖括号“<“和右尖括号“>“之间的文本
1.在<>中的称为开始标记;在>中的称为结束标记
2.空标记:
不包含元素的标记。
空标签必须以“/>”结束。
格式:
<空标记的名称/><空标记的名称属性列表/>
注意:
除空标记外,标签必须成对:
有始有终。
所有的开始标签和结束标签必须匹配。
在标记符“<“和"标记的名称"之间不能含有空格。
在标记符"/>"前面可以有空格或回行。
标签必须嵌套正确。
XML标记必须遵循下面的命名规则:
1.名字中可以包含字母、数字以及其它字母或文字;还可包含下划线(_)、点(.)、连字符(-)
2.名字不能以数字开头;可以用字母、文字或者下划线开头。
3.名字不能以字母xml(或XML或Xml..)开头;
4.名字中不能包含空格。
三、元素
位于开始标记与结束标记间
一份文档有且只有一个根元素。
根元素下的所有元素叫“子元素”。
标签必须嵌套正确。
不包含自子元素的元素叫“叶子”;包含子元素的元素叫“分支”。
如:
四、属性
一个元素的开始标志中的名称-值对
所有的属性值必须位于单引号或双引号中。
每一个元素的属性不允许出现超过一次。
开始标志内,类似赋值语句
如:
五、注释
注释可以出现在文档的任何位置。
(但不建议放在声明前面,部分浏览器会报错)
注释以
--开始,以-->结束。
注释内不能包含双连字符(--);除此之外,注释可以包含任何内容。
注释内的任何标记都被忽略
六、处理指令
处理指令是为使用一段特殊代码而设计的标记,简称为PI。
大多数XML文档都是以XML声明开始,该声明本身就是特殊的处理指令。
处理指令对应用程序特定的数据进行编码。
一条处理指令包含一个目标,后跟数据。
用
和?
>定界符将处理指令包起来。
目标确定应用程序,而对应用程序不能识别的目标,其会忽略这些处理指令。
七、实体
XML规范预定义了五个实体。
<====<
>====>
"====”
'====‘
&====&
自定义实体:
在DTD中定义
ENTITY实体标志"实体内容">
在xml中引用自定义实体,用&实体标志;代表实体内容。
另外,无法从键盘输入的字符可以使用字符引用,就是用字符的Unicode代码点来引用该字符。
以""开始字符引用,以分号结尾,x必须为小写,使用十六进制。
如:
=表示等于号。
也可以使用字符引用来引用<,>,',",&"
查看字符的代码点(附件->系统工具->字符映射表)。
八、CDATA
当一段文本中出现很多实体引用和字符引用时,会导致文本数据的读写困难,CDATA段就是为了解决这一问题引入的。
DATA区段开始于"
[CDATA["结束于"]]>"
CDATA内部的所有东西都会被解析器忽略解析,不用检查它的格式。
但是CDATA段中不能嵌套另一个CDATA段。
九、属性
属性是标记的属性,可以为标记添加附加信息。
(1)属性的组成
属性是一个名值对,必须由名称和值组成,属性必须在标记的开始标记或空标记中声明,用"="为属性指定一个值。
语法如下:
<标记名称属性列表/>
<标记名称属性列表>XXX标记名称>
例如:
<桌子width="40"height='100'/>
(2)使有属性的原则
属性不体现数据的结构,只是数据的附加信息;
一个信息是作为一个标记的属性或子标记,取决于具体问题,不要因为属性的频繁使用破坏XML的数据结构。
下面是一个结构清晰的XML文件:
<楼房height="23m"width="12m">
<结构>混凝土结构>
<类别>商用类别>
楼房>
下面是一个结构不清晰的XML文件:
<楼房height="23m"width="12m"结构="混凝土"建筑商="华海集团"类别="商用">楼房>
十、名称空间/包
XML文件允许自定义标记,所以可能出现同名字的标记,为了区分这些标记,就需要使用名称空间。
名称空间的目的是有效的区分相同的标记,其实并不真实存在。
语法:
声明有前缀的名称空间xmlns:
前缀名=名称空间的名字
声明无前缀的名称空间xmlns=名称空间的名字(缺省)
注意:
当且仅当它们的名字相同时称二个名称空间相同,也就是说,对于有前缀的名称空间,如果二个名称空间的名字相同,即使前缀不相同,也是相同的名称空间,返之同然。
前缀只是方便引用而已。
基本术语
一、序言Prolog:
包括XML声明(XMLDeclaration)和文档类型声明(DocumentTypeDeclaration)。
二、良构(well-formed规范的):
符合W3C定义的XML文档。
验证
为什么需要验证?
对XML文件施加额外的约束,以便交流。
一、DTD验证
文档类型定义(DocumentTypeDefinition)
DTD定义了XML文档内容的结构,保证XML以一致的格式存储数据。
精确的定义词汇表,对XML的内容施加约束。
符合DTD的规范XML文档称为有效的文档。
由DTD定义的词汇表以及文档语法,XML解析器可以检查XML文档内容的有效性。
规范的XML文件不一定是有效的;有效的一定是规范的。
1、DTD声明
1)DTD声明可以在单独的一个文件中
2)DTD声明可以内嵌在XML文件中
3)DTD声明可以一部分在单独的文件中,另一部分内嵌在XML文件中
2、引入外部DTD文件
DOCTYPEdataSYSTEM"Client.dtd">
Data:
根节点名称
Client.dtd:
dtd文件路径
3、DTD四种标记声明
元素(ELEMENT)、属性(ATTLIST)、实体(ENTITY)、符号(NOTATION)
1)元素(ELEMENT)XML元素类型声明
声明元素:
ELEMENTelementName(contentModel)>
元素的内容通过内容模式来描述。
DTD内容模式的种类有:
EMPTY元素不能包含任何数据,但可以有属性(前提是必须声明其属性)。
不能有子元素。
不能有文本数据(包括空白,换行符)。
DTD中定义:
ELEMENTelementNameEMPTY>
XML中:
(#PCDATA)规定元素只包含已析的字符数据,而不包含任何类型的子元素的内容类型。
DTD中定义:
ELEMENTstudent(#PCDATA)>
XML中合法内容:
(Elements)元素由内容模式部件指定。
ELEMENTname(childparticles)>
内容模式部件可以是下表列出的内容。
ELEMENTname(a,b)>子元素a、b必须出现,且按照列表的顺序
ELEMENTname(a|b)>选择;子元素a、b只能出现一个
ELEMENTname(a)>子元素a只能且必须出现一次
ELEMENTname(a)+>子元素a出现一次或多次
ELEMENTname(a)*>子元素a出现任意次(包括零次、一次及多次)
ELEMENTname(a)?
>子元素a出现一次或不出现
Mixed混合模式:
子元素中既可有文本数据又可有下级子元素。
ELEMENTrn(#PCDATA|an|en)*>“|”和“*”必须写。
上句表示在rn内,字符数据或en及an可以出现任意多次,顺序不限。
优先写(#PCDATA)如:
(#PCDATA|name)*正确(name|#PCDATA)*错误
ANY元素可以包含任何类型的数据。
子元素(必须在DTD中有定义)和文本数据(包括空白)。
DTD中定义:
ELEMENTaANY>
ELEMENTbANY>
XML中合法内容:
somngthing或者或者oo
2)属性(ATTLIST)特定元素类型可设置的属性&属性的允许值声明
ATTLISTelementName
attributeName1attributeTypeattributeDefault
.......
attributeNameNattributeTypeattributeDefault>
属性类型(AttributeType):
CDATA该属性只能包含字符数据(注意与CDATA段、PCDATA的区别)
NMTOKEN是CDATA的子集,它的字符只能是字母,数字,句点,破折号,下划线或冒号。
NMTOKENS类似NMTOKEN,但这个可以包含多个值,每个值之间用空格隔开。
ID该属性的取值在同一文档内是唯一的。
一个元素只能有一个ID类型的属性。
IDREF类似指针,指向文档中其他地方声明的ID值。
如果该属性取值和指向的ID值不匹配,则返回错误。
IDREFS类似IDREF,但它可以具有由空格分隔开的多个引用。
ENTITY该属性的值必须对应一个在文档内部声明的但还没有分析过的实体。
ENTITYS类似ENTITY,但它可以包含由空格分隔开的多个实体。
NOTATION该属性的值必须引用在文档中其他地方声明的某个注释的名称。
(enumerated)类似枚举的变量,该属性必须匹配所列的值。
各值用“|”分隔开。
如:
(春|夏|秋|冬)实际内容文档只能从中取一个。
属性特性(AttributeDefault):
#REQUIRED必须有且只能有一个属性。
#IMPLIED可有可无。
#FIXED在DTD中定义默认值,XML中可以不指定,指定则必须等于该默认值。
attribute-value如果不指定则用DTD定义的默认值,指定则用指定的值。
[CDATA[############属性(ATTLIST)的举例##############]]>
例一(#REQUIRED)
DTD中:
ELEMENTel(#PCDATA)>
ATTLISTelat1NMTOKENS#REQUIREDat2CDATA#REQUIRED>
XML中,正确:
XML中,错误:
例二(#IMPLIED,#FIXED)
DTD中:
ELEMENTel(#PCDATA)>
ATTLISTelatCDATA#FIXED"10"at2CDATA#IMPLIED>
XML中,正确:
XML中,错误:
例三(attribute-value)
DTD中:
ELEMENTel(#PCDATA)>
ATTLISTelatCDATA"10"at2CDATA"20">
XML中,正确:
例四(enumerated+attribute-value)
DTD中:
ELEMENTel(#PCDATA)>
ATTLISTelat(10|20|30)"10">
XML中,正确:
[CDATA[############属性(ATTLIST)举例完毕##############]]>
3)实体(ENTITY)可重用的内容声明
在DTD中定义
ENTITY实体标志"实体内容">
在xml中引用自定义的实体,用&实体标志;代表实体内容。
4)符号(NOTATION)不要解析的外部内容的格式声明。
3、内部实体:
在xml文件里面写(少用)
外部实体:
另外在xml同一文件夹下建立一个dtd文件(提倡)
--****************内外部的实体举例*****************-->
外部的:
xmlversion="1.0"encoding="UTF-8"standalone="no"?
>
DOCTYPErootSYSTEM"goodsInfo.dtd">
--用这句引用外部dtd-->
以下是名为"goodsInfo.dtd"文件
ELEMENTroot(goodsInfo)>
ELEMENTgoodsInfo(goodsName,goodsPrice)>
ELEMENTgoodsName(#PCDATA)>
ELEMENTgoodsPrice(#PCDATA)>
内部的:
xmlversion="1.0"?
>
DOCTYPEroot[
ELEMENTroot(student)>
ELEMENTstudent(#PCDATA)>
ENTITYCCTV"中央电视台">
]>
--把DTD文件写在体内-->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Ooaduml xml 串讲