2022年G_接口设计之美_五子棋框架设计范例_ok .pdf
-
资源ID:33387171
资源大小:2.05MB
全文页数:16页
- 资源格式: PDF
下载积分:4.3金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2022年G_接口设计之美_五子棋框架设计范例_ok .pdf
1 G03_接口设计之美_ 五子棋框架设计范例内容: 1. 框架(Framework):当今主流平台的幕后架构 2. 从 EIT 造形到框架 3. 框架设计范例:以五子棋为例 3.1 阶段一:从传统类(Class)造形设计出发 3.2 阶段二:继续运用EIT 造形设计 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 16 页 - - - - - - - - - 2 框架(Framework):当今主流平台的幕后架构 从 EIT 造形到框架(Framework) 前言前言: :框架 (Framework)是一个平台( 如Android 平台、iOS 平台等) ,它提供 API(即接口)来与数十万支App 对接。于是,对于框架开发是非常关键的了。 基于 EIT 造形去寻找接口、设计接口、表达接口,就能清晰定义框架的 API 了。 框架是当今主流平台的幕后架构,他强力支撑当今Apple和Google 应用商店的运作。 1. 框架(Framework):当今主流平台的幕后架构 框架(Framework)是一个平台( 如Android平台、iOS 平台等) ,它提供 API(即接口)来与数十万支App 对接。之前,我們說過了,從架構設計應該迅速落实为(可执行的)代码。其中,可执行的代码有两种:框架和App。由强龙开发框架代码;而由地头蛇开发App代码;这称为 分工模式。这就是当今Apple和 Google应用商店的分工模式。例如: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 16 页 - - - - - - - - - 3 框架(Framework)是一个平台(如Android平台、iOS 平台等),它提供 API(即接口)来与数十万支App 对接。于是,EIT造形与框架开发& 设计就息息相关了。EIT 造形的焦点在于,这个恰好是框架与App 的衔接点,也成为框架开发团队与App 开发团队的分工界线。因此,架构师可以藉由 EIT 造形来清晰地表述框架与App的接口。然后,由框架开发团队(强龙)撰写类代码,以及与相关的其它类的代码,就成为软件框架了。并由App 开发团队(地头蛇)撰写类代码,以及与相关的其它类的代码,就成为App 软件了。 2. 从 EIT 造形到框架(Framework) 通常,一个框架含有许多接口,亦即需要一群EIT 造形来清晰表述这些。其意味着,由一群 EIT 造形组合起来,成为框架的核心部分:与App 的接口。 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - 4 在特定领域(Domain)里,将EIT 造形的部份有意义地组合起来,就成为框架(Framework)的核心部分了。其中,包括将组合起来成为框架本身;同时将组合起来成为框架的应用(Application)软件。例如,Android框架就包含了SurfaceView类,及其SurfaceHolder.Callback接口。 于此图里,SurfaceHolder.Callback扮演的角色,SurfaceView(含SurfaceHolder)扮 演 的 角 色 , 而myRenderer扮 演 的 角 色 。SurfaceView引 擎 透 过Callback接 口 , 呼 叫 了myRenderer的surfaceCreated()等函数。 虽然框架并没有包含类,但是架构师必须思考整个EIT 造形,将 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - 5 考虑进来,才能完整而明确地表述接口。由于EIT 造形能明确地将表述出来,并清晰地传达给App开发者。于是,开发者就能开发来实现,并精确地搭配到,就能与框架一起编译, 成为可执行的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 void 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 = BitmapFactory.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.lockCanvas(); 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(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 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对象向Android的 WindowManagerService(和SurfaceFlinger)系统服务取的一个Surface,将它包装于SurfaceView里的SurfaceHolder对象里。 然 后 , 透 过Callback接 口 来 呼 叫myRenderer子 类 里 的surfaceCreated()函数,此时将该SurfaceHolder对象(的指针或参考)传递给myRenderer的对象。myRenderer子类的对象才依循 SurfaceHolder的指标而呼叫到SurfaceHolder的 lockCanvas()等函数。 以上 說明了,Android框架里含有一個 EIT 造形,就是:造形的部分。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - 7 G03_接口设计之美_ 五子棋框架设计范例内容: 1. 框架(Framework):当今主流平台的幕后架构 2. 从 EIT 造形到框架 3. 框架设计范例:以五子棋为例 3.1 阶段一:从传统类(Class)造形设计出发 3.2 阶段二:继续运用EIT 造形设计 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 16 页 - - - - - - - - - 8 框架设计范例:以五子棋为例 前言前言: :应用框架(Application Framework)是一个平台( 如Android 平台、iOS 平台等),它提供API(即接口)来与数十万支App 对接。于是,EIT 造形与框架开发 &设计就息息相关了。 于此,将以五子棋的架构设计为例,进行两阶段的分析与设计。 第 1 阶段:先依循传统的OOAD(Object-Oriented Analysis & Design)来进行领域知识分析 &设计。OOAD 就是基于类 (Class)造形的分析&设计方法。 这是目前业界的主流方法,其最主要的缺点是:没有清晰而明确地表述出接口。 第 2 阶段:延续上阶段OOAD 的分析&设计结果,基于 EIT 造形去厘清接口 ,因而清晰定义了框架的API。 由于 EIT 造形是由类造形扩充而来,所以上述两阶段的衔接是很流畅的。 3. 框架设计范例:以五子棋為例 3.1 階段一:从传统类(Class)造形设计出发 五 子棋的 OOAD分析与设计 (图 片来源:互动百科 ) 从传统类(Class)造形设计出发,针对五 子棋进行传统的OOAD 分析与设计(Object-Oriented Analysis & Design)。其分析步骤 为: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 16 页 - - - - - - - - - 9 Step-1:找到主角,就是: 棋手首先, 寻找五 子棋 的核心 概念 ,成为类造形的内涵 。例如: 五子棋游戏的主角是 棋手 (玩家 ), 棋手 有两种: 电脑 和人;其中, 电脑棋手又 分为数个 不同棋力 等级,例如: Step-2:抽象出 抽象类 别(Super -class),就是BaseAI 類: Step-3:再增添 一种 棋手 ,HumanPlayer (人) ,而 且再度 进行 抽象, 得到: Step-4:再联想 到人之外的物棋盘(Chess Board),它必须呈 现于 UI 画面上,所以设计成为View 的子类 别,得到: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 16 页 - - - - - - - - - 10 Step-5:再从棋盘联想到相关的 概念 :棋(Chess);以及用来控制 UI 显示 的GobangActivity类别。如 下图。 Step-6:还可以 继续联想下去,就 更加 完整了。 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 16 页 - - - - - - - - - 11 3.2 阶段二:继续运用EIT 造形设计 从上 图里, 可以 看出来, 传统 基于类造形的分析与设计, 只凸显 了类(Class)和关系(Relationship),而将接口(Interface)隐藏 于类或关系里,此时EIT 造形就派上 用场了。例如, 上图的 ”棋盘 (Chess Board) ”与”棋手 (Player) ”之间是1:N 的组合关系,就隐含了一个 重要接口:可 让用户选择 多位棋手 。于是,藉由EIT 造形的来表述这个接口,而棋盘 和棋手 就是它的配角:棋盘 扮演角色,而 棋手 扮演角色,如下图:传统 上,将隐藏 起来,常常 带来许多 缺点,例如: 架构师 知道 接口的 存在,但没有 途径去 清晰地表述出来。 由于没有明确传达给开发者,徒增 开发者的 负担 ,也提 高了失误 的可能 性。由于没有 凸显 接口, 无法协助项目经理(PM) 掌握最佳 的团队分工界线,例如框架开发与App 开发的分 际。 等等。 于是,可以藉EIT 造形来 凸显 ,如下图: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 16 页 - - - - - - - - - 12 这个 IPlayer 就成为框架与App 的分工界线了。 在买主还 没来、或用 户还 没出现之前,框架团队就能先定义IPlayer接口,然后进行开发Chess Board和Line等类的代码,成为框架代码了。而等到买主 来了、或用 户出现之后,App团队才开 始动手 设计 棋手 (即的类体系),成为App 软件代码了。 由于接口(如上图的 IPlayer) 只能含有 抽象函数, 不能含有 具象函数, 所以这些抽象函数的实现代码都必须写在App 的类里。这会增加 App 开发团队的负担 ,延迟 App 开发 交付 的效率 。 框架开发团队为了提供更多的 默认 行为(Default Behavior)来让开发团队可加以复用(Reuse),就会设计 抽象类(Abstract)来具象函数,来实现这些 默认 行为。例如 下图: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 16 页 - - - - - - - - - 13 这个 BasePlayer是一个 抽样 类,内含 func()等具象函数,可撰写代码来提供默认 行为, 让各 类来复用,能 减轻 App 开发 负担 ,提 高开发 交付效率 。此 时 , BasePlayer扮 演 两 个 角 色 : 一 方 面 扮 演 造形的;另一 方面又 扮演一个 新 EIT 造形的,提供新的,就是上图里的 hook() 抽象函数,来 让 App 的类来撰写其实现代码。于是,这个 新的就封装了 原来的 IPlayer 接口, 变成框架与App 的新接口,也是 新的分工界线了。这个新界线的 优点是: 简清了 App开发者的 负担 ,因而能吸引更多 App 开发者来 使用此软件框架了。 依样画葫芦 ,再依循 EIT 造形, 继续 设计一个IChess 接口,以及设计一个Chess 抽象类,来提供框架与App 之间的,如下图: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 16 页 - - - - - - - - - 14 此时,Chess 也扮演两个角色:一方面 扮演造形的;另一方面又 扮演一个 新 EIT 造形的,提供新的,就是上图Chess 类里的 hook() 抽象函数, 来让 App 的类(如上图的 myC hess)来撰写其实现代码。 为了进一 步减轻 App 开发者的 负担 , 藉之 吸引更多 App 开发者来 使用框架,通常框架开发团队会持续增添更多的 抽象类,来提供 更贴 心的 默认 行为。例如 下图,架构师将BaseAI 和 HumainPlayer两个 抽象类提 升到框架里。 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 16 页 - - - - - - - - - 15 计算机棋手共享的默认 行为,可以写在BaseAI 抽象类里;而 人员棋手 的共享默认 行为 则写在 HumainPlayer抽象类里。至于所有棋手都共享 的默认 行为 则提升到最高层 的 BasePlayer抽象类里。如此,持续丰富 框架的 内涵 ,进一 步减轻 App 开发者的 负担 ,则框架的 价值 就愈来愈高 了。 此外,也提供给App 开发者 更多的 弹性选择空间;例如在 上图里,App开发者撰写类时,就有多种选择 了: 选择继承BaseAI 或继承 HumainPlayer抽象类:可 复用 (Reuse)这两类里的 具象函数。如 下图的 类。 如果不适 合继承上 述两个类,可 选择继承BasePlayer抽象类:可 复用这个类里的 具象函数。如 下图的 类。 如果不适 合继承上 述各个类,可 选择直 接实现 IPlayer 接口:必须 自己实现 IPlayer 里所定义的 各函数。如 下图的 类。 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 16 页 - - - - - - - - - 16 End 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 16 页 - - - - - - - - -