﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客- 攀升·Uranus-随笔分类-面向对象UML</title><link>http://www.cppblog.com/iuranus/category/4278.html</link><description>&lt;br&gt;&lt;font color="#ADFF2F"&gt;Something Different，Something New&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 05 Jan 2009 08:46:07 GMT</lastBuildDate><pubDate>Mon, 05 Jan 2009 08:46:07 GMT</pubDate><ttl>60</ttl><item><title>模式应用(二) 俄罗斯方块设计的思考:用OO的思想</title><link>http://www.cppblog.com/iuranus/archive/2008/12/28/70593.html</link><dc:creator>攀升</dc:creator><author>攀升</author><pubDate>Sun, 28 Dec 2008 15:36:00 GMT</pubDate><guid>http://www.cppblog.com/iuranus/archive/2008/12/28/70593.html</guid><wfw:comment>http://www.cppblog.com/iuranus/comments/70593.html</wfw:comment><comments>http://www.cppblog.com/iuranus/archive/2008/12/28/70593.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.cppblog.com/iuranus/comments/commentRss/70593.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iuranus/services/trackbacks/70593.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大学的时候看同学用C写的俄罗斯方块，今天心血来潮，突然想设计下用OO的思想来设计下。俄罗斯方块是一以前俄罗斯的计算机科学家自己开发娱乐的小游戏，没想到后来这么流行。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;像俄罗斯（Tetris）方块，迷宫，推箱子这种小游戏，其实建模都差不多，这里我选择一个2维数组10&#215;20的来代表整个游戏区域的显示点,0代表该位置空，1代表有方块。 每一个数组值（a[2][4]）代表屏幕上的一个像素，数组类似于：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[20][10] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.........................................<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里有几个简单的判断：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1. 判断是不是方块撞到墙上，就是看a[i-1]中i-1是不是&lt;0或i+1是不是&gt;10;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2. 判断一层能不能clear， 就是每行是不是数组值都是1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int k = 0;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int i=0; i&lt;20; i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int j = 0; j&lt;10; j++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(a[i][j] == 1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(k==10)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClearRow(i);&nbsp;&nbsp; //把数组第i行全置0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3......其它的判断类似<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好，具体的设计思想参考图1-1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/iuranus/Tetrix.jpg" border=0>&nbsp;<br></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图1-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在游戏操作中，有六个键， 上下左右＋左右旋转，&nbsp;该图中Form是边界类与UI和用户控制打交道，Handler业务控制类， ManageArray操作singleton数组和控制一些比较复杂算法的类。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先该设计把整个业务算法等等从界面分离开，不管你用什么Iphone的UI的SDK还是android的，&nbsp;都没问题。&nbsp;他们只与我们的UIForm打交道。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;再次这边的Singleton模式把数组暴露给想要他的程序。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最后用策略模式把旋转的算法分开，每个算法只关心自己怎么变化，想扩展就加一个类，如果一个算法要修改，那么只修改某一个方法。开闭原则。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;望各位博友指点<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<img src ="http://www.cppblog.com/iuranus/aggbug/70593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iuranus/" target="_blank">攀升</a> 2008-12-28 23:36 <a href="http://www.cppblog.com/iuranus/archive/2008/12/28/70593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>类图--关联</title><link>http://www.cppblog.com/iuranus/archive/2007/01/08/17443.html</link><dc:creator>攀升</dc:creator><author>攀升</author><pubDate>Mon, 08 Jan 2007 13:17:00 GMT</pubDate><guid>http://www.cppblog.com/iuranus/archive/2007/01/08/17443.html</guid><wfw:comment>http://www.cppblog.com/iuranus/comments/17443.html</wfw:comment><comments>http://www.cppblog.com/iuranus/archive/2007/01/08/17443.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/iuranus/comments/commentRss/17443.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iuranus/services/trackbacks/17443.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; &nbsp;<font size=2> 想成为一个优秀的软件设计师，UML是必备的一项技能，但我感觉国内对软件建模不是很重视，就从现在的高校老师和学生对它的重视程度来看，我国软件这几年想赶上几个强国还是很难。<br>&nbsp;&nbsp;&nbsp; 所以我不能忘记看这个呀，呵呵，今天我看了下类图中关联的相关知识，做个总结。<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 关联，如图1-1，它是最基本的代表两个类存在关系。图1-2也是存在依赖的关联。<br><br>&nbsp;&nbsp;&nbsp; 聚合，图1-3，它是特殊的关联，球队是所有球员的集合，代表所有球员，但两个类之间没有&nbsp;&nbsp; 依赖关系，也叫引用聚合。<br><br>&nbsp;&nbsp;&nbsp; 组合，图1-4，它是特殊的聚合，每个类有生存期，类之间存在着依赖关系。<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 生成 ，图1-5，也就是OOP中的继承，表示&#8220;是一个&#8221;的关系。<br>&nbsp; <br>&nbsp;&nbsp;<img src="http://uranus.javaeye.com/upload/picture/pic/1747/acccfda6-7aa6-414f-9bef-0a31fb0b2636.jpg"> &nbsp; <br></font><br>
<img src ="http://www.cppblog.com/iuranus/aggbug/17443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iuranus/" target="_blank">攀升</a> 2007-01-08 21:17 <a href="http://www.cppblog.com/iuranus/archive/2007/01/08/17443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>