高焕堂视频学习笔记:面对对象与UML建模

来源:互联网 发布:守望先锋 英雄 数据 编辑:程序博客网 时间:2024/06/05 09:37

说明:
2015年的时候看了一段时间的高焕堂从Android程序员到架构师视频,总共接近234集的内容,15年大概看了60集左右,后来因为其他的事情,这个事就暂停了,最近找出笔记,发现需要整理下,不然都腐烂在电脑硬盘里了,所以特意整理之后发出来。希望对小伙伴们学习会有帮助。大致浏览了一下视频目录,感觉165-234集还是不错的,有时间会再学习。

面对对象与UML建模

面对对象

一.面对对象是一种信仰

object-oriented:相信任何软件都是由对象所构成的,而且nothing else。这样电脑语言的设计就简化了,写程序只要定义类别就行了。

service-oriented-architecture(SOA)相信软件的世界都是有服务构成的

二.卡榫函数

1.接口里的函数叫卡榫函数

所谓卡榫(Hook)就是用来结合两个东西的接口。如果两个东西于不同时间出现,则一方会预留虚空,给予另一边于未来时刻能以实体填补该空间,两者虚实相依,就密合起来了。设计优良的卡榫,可以让实体易于新陈代谢、抽换自如。

桌子的卡槽、车子可以更换轮胎

在java中使用抽象函数和覆写函数来实现卡榫函数

2.模板模式

变和不变的分离是设计卡榫函数及应用框架之基本原则和手艺。
分离出变与不变部分之后,就可以将不变部分写在父类别里,而变的部分就写在子类别里。

三.IOC机制和default函数

控制反转机制来源于OO语言的类别继承体系,基类的函数可以主动调用子类的函数,这就是典型的IOC机制。
基类与子类之间,主控权是在基类手上,透过hook函数来调用子类
通常基类是撰写在先,而子类则撰写在后,这种前辈拥有主导权,进而控制后辈之情形,就通称为控制反转。

四.主动型vs被动型API

模块和模块之间的接口就称之为API
人和软件之间的接口称之为UI

父类调用子类:主动型
子类调用父类:被动型

API这个名词,有三个密切关联的动词:定义、实现、调用,根据这三个角度,可将api区分为主动型与被动型两种。
从基类的视角来看,基类成为强龙,子类成为地头蛇

被动型API:
主动型API:我(即强龙)定义API
且我来实现API
而让对方(即地头蛇)来呼叫我

主动型API:
我定义API
由地头蛇来遵循,实现API
让我来呼叫对方

UML建模

一.建模与图形思考

架构师的职责就是创意设计与人际沟通。在规划架构或框架的阶段,还没开始动工撰写android程序码,那么架构师如何进行创意思考呢?又如何将创意设计表达出来,争取自己公司老板和业主的支持(例如投资)呢?

大家都知道,向举世公认的创意天才:达芬奇,他具备非凡的图形绘制和思考能力。

这提醒了我们,身为架构师,器图形绘制和思考能力愈好,器创意设计与人际沟通能力就愈好。因此,培养android架构师的图形思考能力是即为重要的。

二.标准图形化思考语言UML

图形建模:模型内含一组基本概念,及其间之关系;如果以图形表示出来,就能发挥图形思考的效益了。
UML图形思考语言,协助架构师发挥其图形思考,表达出系统架构的模型。对于音乐来说:五线谱是一种图形语言。

对于软件来说,uml是个很好的图形语言,也有很多uml建模工具,对于android架构师或开发者来说,都是非常重要的。无论在培养图形思考或团队沟通上,对于android软件创意和管理上,都无可取代。

类图、用例图、状态图、顺序图、活动图、通信图、模块图、部署图、组合结构图

uml协助架构师进行图形思考

讲了这么多,其实就一句话:uml是用来辅助架构师进行图形化思考的,是架构师架构的通用语言。

三.uml应用:业务内涵的分析抽象&表达

1.系统分析

许多人在学习系统分析时,常迷失于其字面上的意义,以为分析的对象是系统,这是一种常见的迷思,其实,分析的对象是系统所处的业务领域知识才是正确的就如同计算机专家所说:ooa不是要去分析实际的系统,而是用来分析人们对系统的专业认知和做法——从收集到的领域概念来分析出业务内涵。

业务领域知识=业务内涵
所以系统分析的主要对象并不是系统本身,而是分析专家们如何以其专业知识来叙述系统,亦即,专家心中的业务领域知识才是系统分析的主要对象。所以焦点是业务知识,而不是系统。

业务领域概念
知识的组成要素是概念。领域知识的组成要素是领域概念。
概念有它的属性,概念之间有其关系。
系统分析就是要分析领域知识里的概念,并以uml的类别等表示之
概念是抽象的,代表一群实体,是沟通的重要媒介。例如:请买杯咖啡,咖啡是个概念,具有这种概念的人,都会了解这句话的意思。他会凭其经验而想到真实的咖啡。
概念代表一个群体——类别,人们藉由天赋的能力运用经验去想到其所代表的实际东西——对象。
例如您听到买一只吉他,这吉他概念让您想到经验中的吉他,而去乐器行买一只真实的吉他回家。
找出领域知识里的概念,就是找出软件系统的对象和类别。

2.举例1:嫦娥奔月的故事

虽然嫦娥可能是传说中虚构的,并非事实,但是确确实实是我们心中的清晰概念,传说中的主角,所以是个重要的类别:

不仅上述的名词概念而已,其相关的动作也常是重要概念。动词常常代表一项事件的发生,而人们常从人、事、时、地、物等去描述一个事件的发生情景。
譬如,吃仙丹就有动作的对象——仙丹动作的主角——嫦娥,当然还有地点、时间,甚至仙丹来源等等。

3.举例2.五子棋




四.谈论:模型与代码

在传统的观点里面,大多数先绘制uml模型图,然后才开始构思程序码的撰写,使得uml建模成为撰写程序码的前置工作,因此许多程序员将uml建模视为多余的负担,为了节省开发成本,就省略掉uml建模的工作了。

如果把uml图形化取掉,就去掉了训练架构师必要的图形思考能力,而图形思考又是晋升到架构师必备的技能。就很少有机会训练这种能力,就很难晋升到架构师。

在新潮的观点里,uml建模与代码是软件系统本体的两个观点(或者面向),两者没有先后顺序关系,而是并存和兼具于同一个人的脑海里。这就像两只眼睛看到的景象并存在一个人的脑海里一般,如此才能看到更真实的世界,也能做出更完美的软件系统来。

0 0
原创粉丝点击