《2022年G_接口设计之美_五子棋框架设计范例_ok .pdf》由会员分享,可在线阅读,更多相关《2022年G_接口设计之美_五子棋框架设计范例_ok .pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 G03_接口设计之美_ 五子棋框架设计范例内容: 1. 框架(Framework):当今主流平台的幕后架构 2. 从 EIT 造形到框架 3. 框架设计范例:以五子棋为例 3.1 阶段一:从传统类(Class)造形设计出发 3.2 阶段二:继续运用EIT 造形设计 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 16 页 - - - - - - - - - 2 框架(Framework):当今主流平台的幕后架构 从 EIT 造形到框架(Framework) 前言前言:
2、 :框架 (Framework)是一个平台( 如Android 平台、iOS 平台等) ,它提供 API(即接口)来与数十万支App 对接。于是,对于框架开发是非常关键的了。 基于 EIT 造形去寻找接口、设计接口、表达接口,就能清晰定义框架的 API 了。 框架是当今主流平台的幕后架构,他强力支撑当今Apple和Google 应用商店的运作。 1. 框架(Framework):当今主流平台的幕后架构 框架(Framework)是一个平台( 如Android平台、iOS 平台等) ,它提供 API(即接口)来与数十万支App 对接。之前,我們說過了,從架構設計應該迅速落实为(可执行的)代码。其
3、中,可执行的代码有两种:框架和App。由强龙开发框架代码;而由地头蛇开发App代码;这称为 分工模式。这就是当今Apple和 Google应用商店的分工模式。例如: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 16 页 - - - - - - - - - 3 框架(Framework)是一个平台(如Android平台、iOS 平台等),它提供 API(即接口)来与数十万支App 对接。于是,EIT造形与框架开发& 设计就息息相关了。EIT 造形的焦点在于,这个恰好是框
4、架与App 的衔接点,也成为框架开发团队与App 开发团队的分工界线。因此,架构师可以藉由 EIT 造形来清晰地表述框架与App的接口。然后,由框架开发团队(强龙)撰写类代码,以及与相关的其它类的代码,就成为软件框架了。并由App 开发团队(地头蛇)撰写类代码,以及与相关的其它类的代码,就成为App 软件了。 2. 从 EIT 造形到框架(Framework) 通常,一个框架含有许多接口,亦即需要一群EIT 造形来清晰表述这些。其意味着,由一群 EIT 造形组合起来,成为框架的核心部分:与App 的接口。 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
5、 - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - 4 在特定领域(Domain)里,将EIT 造形的部份有意义地组合起来,就成为框架(Framework)的核心部分了。其中,包括将组合起来成为框架本身;同时将组合起来成为框架的应用(Application)软件。例如,Android框架就包含了SurfaceView类,及其SurfaceHolder.Callback接口。 于此图里,SurfaceHolder.Callback扮演的角色,SurfaceView(含SurfaceHolder)扮 演 的 角 色 ,
6、而myRenderer扮 演 的 角 色 。SurfaceView引 擎 透 过Callback接 口 , 呼 叫 了myRenderer的surfaceCreated()等函数。 虽然框架并没有包含类,但是架构师必须思考整个EIT 造形,将 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - 5 考虑进来,才能完整而明确地表述接口。由于EIT 造形能明确地将表述出来,并清晰地传达给App开发者。于是,开发者就能开发来实现,并精确
7、地搭配到,就能与框架一起编译, 成为可执行的App 软件(如Android的 APK)了。 / myRenderer.java / . class myRenderer implements SurfaceHolder.Callback private SurfaceHolder mHolder; private DrawThread mThread; public void surfaceCreated(SurfaceHolder holder) mHolder = holder; mThread = new DrawThread(); mThread.start(); public voi
8、d surfaceDestroyed(SurfaceHolder holder) mThread.finish(); mThread = null; public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) / - class DrawThread extends Thread int degree = 36; boolean mFinished = false; DrawThread() super(); Override public void run() Bitmap bmp = BitmapFa
9、ctory.decodeResource(getResources(), R.drawable.x_xxx); Matrix matrix; degree = 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 16 页 - - - - - - - - - 6 while(!mFinished) Paint paint = new Paint(); paint.setColor(Color.CYAN); Canvas cavans = mHolder.lockCanva
10、s(); cavans.drawCircle(80, 80, 45, paint); /- rotate - matrix = new Matrix(); matrix.postScale(1.5f, 1.5f); matrix.postRotate(degree); Bitmap newBmp = Bitmap.createBitmap( bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true); cavans.drawBitmap(newBmp, 50, 50, paint); mHolder.unlockCanvasAndPost
11、(cavans); degree += 15; try Thread.sleep(100); catch (Exception e) void finish() mFinished = true; / ac01.java / . public class ac01 extends Activity private SurfaceView sv = null; Override protected void onCreate(Bundle icicle) super.onCreate(icicle); sv = new SurfaceView(this); myRenderer mr = new
12、 myRenderer(); sv.getHolder().addCallback(mr); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(200, 150); param.topMargin = 5; layout.addView(sv, param); setContentView(layout); 首先,SurfaceView
13、对象向Android的 WindowManagerService(和SurfaceFlinger)系统服务取的一个Surface,将它包装于SurfaceView里的SurfaceHolder对象里。 然 后 , 透 过Callback接 口 来 呼 叫myRenderer子 类 里 的surfaceCreated()函数,此时将该SurfaceHolder对象(的指针或参考)传递给myRenderer的对象。myRenderer子类的对象才依循 SurfaceHolder的指标而呼叫到SurfaceHolder的 lockCanvas()等函数。 以上 說明了,Android框架里含有一個
14、EIT 造形,就是:造形的部分。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - 7 G03_接口设计之美_ 五子棋框架设计范例内容: 1. 框架(Framework):当今主流平台的幕后架构 2. 从 EIT 造形到框架 3. 框架设计范例:以五子棋为例 3.1 阶段一:从传统类(Class)造形设计出发 3.2 阶段二:继续运用EIT 造形设计 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
15、 - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 16 页 - - - - - - - - - 8 框架设计范例:以五子棋为例 前言前言: :应用框架(Application Framework)是一个平台( 如Android 平台、iOS 平台等),它提供API(即接口)来与数十万支App 对接。于是,EIT 造形与框架开发 &设计就息息相关了。 于此,将以五子棋的架构设计为例,进行两阶段的分析与设计。 第 1 阶段:先依循传统的OOAD(Object-Oriented Analysis & Design)来进行领域知识分析 &设计。OOAD 就是基
16、于类 (Class)造形的分析&设计方法。 这是目前业界的主流方法,其最主要的缺点是:没有清晰而明确地表述出接口。 第 2 阶段:延续上阶段OOAD 的分析&设计结果,基于 EIT 造形去厘清接口 ,因而清晰定义了框架的API。 由于 EIT 造形是由类造形扩充而来,所以上述两阶段的衔接是很流畅的。 3. 框架设计范例:以五子棋為例 3.1 階段一:从传统类(Class)造形设计出发 五 子棋的 OOAD分析与设计 (图 片来源:互动百科 ) 从传统类(Class)造形设计出发,针对五 子棋进行传统的OOAD 分析与设计(Object-Oriented Analysis & Design)。其
17、分析步骤 为: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 16 页 - - - - - - - - - 9 Step-1:找到主角,就是: 棋手首先, 寻找五 子棋 的核心 概念 ,成为类造形的内涵 。例如: 五子棋游戏的主角是 棋手 (玩家 ), 棋手 有两种: 电脑 和人;其中, 电脑棋手又 分为数个 不同棋力 等级,例如: Step-2:抽象出 抽象类 别(Super -class),就是BaseAI 類: Step-3:再增添 一种 棋手 ,HumanPla
18、yer (人) ,而 且再度 进行 抽象, 得到: Step-4:再联想 到人之外的物棋盘(Chess Board),它必须呈 现于 UI 画面上,所以设计成为View 的子类 别,得到: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 16 页 - - - - - - - - - 10 Step-5:再从棋盘联想到相关的 概念 :棋(Chess);以及用来控制 UI 显示 的GobangActivity类别。如 下图。 Step-6:还可以 继续联想下去,就 更加 完整
19、了。 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 16 页 - - - - - - - - - 11 3.2 阶段二:继续运用EIT 造形设计 从上 图里, 可以 看出来, 传统 基于类造形的分析与设计, 只凸显 了类(Class)和关系(Relationship),而将接口(Interface)隐藏 于类或关系里,此时EIT 造形就派上 用场了。例如, 上图的 ”棋盘 (Chess Board) ”与”棋手 (Player) ”之间是1:N 的组合关系,就隐含了一
20、个 重要接口:可 让用户选择 多位棋手 。于是,藉由EIT 造形的来表述这个接口,而棋盘 和棋手 就是它的配角:棋盘 扮演角色,而 棋手 扮演角色,如下图:传统 上,将隐藏 起来,常常 带来许多 缺点,例如: 架构师 知道 接口的 存在,但没有 途径去 清晰地表述出来。 由于没有明确传达给开发者,徒增 开发者的 负担 ,也提 高了失误 的可能 性。由于没有 凸显 接口, 无法协助项目经理(PM) 掌握最佳 的团队分工界线,例如框架开发与App 开发的分 际。 等等。 于是,可以藉EIT 造形来 凸显 ,如下图: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -
21、- - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 16 页 - - - - - - - - - 12 这个 IPlayer 就成为框架与App 的分工界线了。 在买主还 没来、或用 户还 没出现之前,框架团队就能先定义IPlayer接口,然后进行开发Chess Board和Line等类的代码,成为框架代码了。而等到买主 来了、或用 户出现之后,App团队才开 始动手 设计 棋手 (即的类体系),成为App 软件代码了。 由于接口(如上图的 IPlayer) 只能含有 抽象函数, 不能含有 具象函数, 所以这些抽象函数的实现代码都必须写在App 的类里。
22、这会增加 App 开发团队的负担 ,延迟 App 开发 交付 的效率 。 框架开发团队为了提供更多的 默认 行为(Default Behavior)来让开发团队可加以复用(Reuse),就会设计 抽象类(Abstract)来具象函数,来实现这些 默认 行为。例如 下图: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 16 页 - - - - - - - - - 13 这个 BasePlayer是一个 抽样 类,内含 func()等具象函数,可撰写代码来提供默认 行为,
23、 让各 类来复用,能 减轻 App 开发 负担 ,提 高开发 交付效率 。此 时 , BasePlayer扮 演 两 个 角 色 : 一 方 面 扮 演 造形的;另一 方面又 扮演一个 新 EIT 造形的,提供新的,就是上图里的 hook() 抽象函数,来 让 App 的类来撰写其实现代码。于是,这个 新的就封装了 原来的 IPlayer 接口, 变成框架与App 的新接口,也是 新的分工界线了。这个新界线的 优点是: 简清了 App开发者的 负担 ,因而能吸引更多 App 开发者来 使用此软件框架了。 依样画葫芦 ,再依循 EIT 造形, 继续 设计一个IChess 接口,以及设计一个Che
24、ss 抽象类,来提供框架与App 之间的,如下图: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 16 页 - - - - - - - - - 14 此时,Chess 也扮演两个角色:一方面 扮演造形的;另一方面又 扮演一个 新 EIT 造形的,提供新的,就是上图Chess 类里的 hook() 抽象函数, 来让 App 的类(如上图的 myC hess)来撰写其实现代码。 为了进一 步减轻 App 开发者的 负担 , 藉之 吸引更多 App 开发者来 使用框架,通常
25、框架开发团队会持续增添更多的 抽象类,来提供 更贴 心的 默认 行为。例如 下图,架构师将BaseAI 和 HumainPlayer两个 抽象类提 升到框架里。 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 16 页 - - - - - - - - - 15 计算机棋手共享的默认 行为,可以写在BaseAI 抽象类里;而 人员棋手 的共享默认 行为 则写在 HumainPlayer抽象类里。至于所有棋手都共享 的默认 行为 则提升到最高层 的 BasePlayer抽象
26、类里。如此,持续丰富 框架的 内涵 ,进一 步减轻 App 开发者的 负担 ,则框架的 价值 就愈来愈高 了。 此外,也提供给App 开发者 更多的 弹性选择空间;例如在 上图里,App开发者撰写类时,就有多种选择 了: 选择继承BaseAI 或继承 HumainPlayer抽象类:可 复用 (Reuse)这两类里的 具象函数。如 下图的 类。 如果不适 合继承上 述两个类,可 选择继承BasePlayer抽象类:可 复用这个类里的 具象函数。如 下图的 类。 如果不适 合继承上 述各个类,可 选择直 接实现 IPlayer 接口:必须 自己实现 IPlayer 里所定义的 各函数。如 下图的 类。 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 16 页 - - - - - - - - - 16 End 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 16 页 - - - - - - - - -