壹、面向对象基础

一、面向对象

1.一个对象包括属性(或叫数据/状态)、方法(或叫操作/行为/服务)
2.类是对象的模板,对象是类的实例。
定义了一个类,里面未必有数据,且不占内存;但是定义了一个对象,里面就要赋值。想象写了一个结构体,在主函数中声明。
3.定义:
对象:一个拥有属性、行为和标示符的实体。面向对象的基本单位
类:一组对象的描述,这组对象有相同的属性和方法。面向对象最基本的程序单元
3.消息机制:一个对象 调用 另一个对象的方法 叫做对象发消息。本质上就是一个对象与其他对象互操作

二、性质

1.封装性:
(1)意思:隐藏属性及操作的内部实现,对象之间通过接口访问对方。
(2)表现:JAVA没有全局变量和全局函数,绝大部分成员是对象,除了简单的数字、字符、布尔类型
2.继承性:
(1)定义:几个相似的类提取共同特征,归为父类(基类/超类)。将这几个相似的类作为父类的子类
*例:电脑有台式、笔记本、平板,把电脑作为父类,台式、笔记本、平板作为子类
(2)意思:子类自动继承父类的属性,方法
(3)作用:用户在开发新应用时不用再写一遍,复用即可
3.多态性:
(1)变量多态性:父类、子类对象可以相互混用赋值
(2)方法多态性:子类继承父类方法的名字,但是可以自己再写一遍,实现与父类不同的功能

贰、UML类图

一、基础

1.作用:描述面向对象程序的结构,即类内属性方法,类间关系
2.画法:
①类:分上中下三个框
α.类名:每个单词首字母大写
β.属性:按“权限 属性名:属性类型”格式写
              权限:public 公有,谁都可以访问。这里用+代替
                         private 私有,只能由类内部成员访问。这里用-代替
                         protected 保护,可以被自己类、子类、同一个包的类访问。这里用#代替
                         friendly 友好,可以被同包成员访问。这里用~代替

              属性名:整个的首字母小写,其后每个单词首字母大写

γ.操作:按“权限 方法名(参数1:参数类型,参数2:参数类型…)”格式来写
              方法和参数名格式同上面的属性名
JAVA1——面向对象

3.类间关系
①关联:A类调用B类的引用。可以说A类“拥有”B类
(1)可以单向关联,也可以双向关联
(2)用箭头表示A到B的关联关系,用直线(或双向箭头)表示双向。箭头头部/直线两端要标注“关联数量 访问权限 名字”。毕竟可以说B类是A类的一个属性。
数量的表示:①具体 ②a到b:a…b。数量有*的意思就是任意多(如果是①中,就是任意多 ,如果是②中,就是a到任意多)
(3)例如下图
JAVA1——面向对象

学校拥有学生,所以是单向关联;学生有一些课,每门课有一些学生,所以是双向关联
除此以外,单向关联的箭头尾部要标A类数量,一般为1
除此以外,箭头头部的名字,如果关联的数量是复数(比如一个车有四个轮子),名字就要是复数(上图的students和courses就是这个道理)

②聚合:关联再往上一层,B类是A类的组成部分。就比如车和轮子。而银行账户不是人的组成部分,属于普通关联关系
JAVA1——面向对象
(空心菱形)

③组合:聚合再往上一层,B类存在时,A类必须已经存在
JAVA1——面向对象
(黑色实心菱形)

④继承:父类和子类
JAVA1——面向对象
⑤依赖关系:瞬时,一个类稍微使用一下另一个类
JAVA1——面向对象
关闭浏览器,Window(不是Windows系统)发送一个消息给WindowClosingEvent

4.典型类结构
(1)集合模型:类与类间一对多关联关系,通常声明为Vector,List等。为了操作方便,应提供增加类、删除类、查询类、获得所有类的数量 的操作
例如,一个Client有多个BankAccount,Client称为集合类,整个称为集合模型
(2)自包含类:一个类和自身有关联关系
JAVA1——面向对象
subordinate的意思是下级
所有有员工(包括老板)都是公司的Employee,可能管下级员工(老板,小领导),也可能不管(基层员工)
(3)关系环模型:多个类的关联与自包含
JAVA1——面向对象

二、UML类图设计

1.得到需求描述

2.得到类:
①标出需求描述中所有名词
②筛选:
    a.删除同义词,只保留一个
    b.删除需求描述中举的具体例子,比如:张三有个建行账户,删除张三,建行账户(如果建行是个无关紧要的属性)
    c.删除仅仅作为类属性的名词
    d.删除可由其他属性值得到的名词,比如月净收入可以由毛收入-成本
    e.删除乱七八糟不属于这个问题的名词及意义笼统的名词
    f.删除指代系统本身的名词
③命名
④根据需求适当增加和调整,翻译成英文(单数)

3.类间关系
①建N*N表格
②识别继承关系(用G,S来表示)
③识别关联关系(用横行类有几个对应竖行类来表示)
④其他关系?

4.定义属性
①建N*3表格:类,属性,关联属性
②看第一步删掉的那些名词
③看继承关系,子类中就不用写父类的属性了
④根据需求适当增加
*注意:复数,首字母小写

5.定义操作
①get和set来得到和修改属性
②有集合类的话就增加:增元素,删元素,查元素,得数量
③父类的方法不用写到子类中了
④根据需求补充

6.驱动类设计
设计驱动类来测试需求描述中想要的功能是否能够实现

最后,根据上述画出UML类图,然后根据UML类图写程序

相关文章:

猜你喜欢
  • 2021-11-21
  • 2022-01-14
  • 2021-08-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-17
相关资源
相似解决方案