文档章节

android与模式:什么是设计?

今幕明
 今幕明
发布于 2014/03/06 23:46
字数 798
阅读 376
收藏 1

在谈设计原则之前,我常问自己:什么是设计,什么是软件设计?也许不是很准确,我个人有一点点理解,自己总结是如下三点:抽象,解耦,问题。

1,抽象。在抽象之前,我 先谈谈什么叫封装。封装就是从某个角度用计算机语言来描述对自然世界的个体的看法。这里有四点:角度,计算机语言,对象,观点。这里我对角度的理解是需 求,具体需求,具体的场景(或者说语境),同一个东西不同时间,空间去看,可能完全不一样,这就是角度。对象,就是指具体的东西,Object,可以是真 实的,也可以是虚拟的。观点,就是其特质,行为等,对应于语言就是具体的属性,方法。语言是具体化的一种表现方式。比如,车,对于拉大货的司机而言,可能 首先考虑的吨位,是否重卡,轻卡;对于普通百姓,更关注品牌,价格;而对于赛车手而言,可能首先是马力,风阻,几缸,百米加速等,公交司机?估计 最关心载重人数(当然这在中国就是基本都是超载,:),那叫一个堵啊,北京的朋友,有没有这感觉?)。将这些需求用计算机语言来描述,就是封装。

例如车,

Car{
string getBand();
int getTon();
float getPrice();
}


而大卡车则可能,

Truck{string getBand();
int getTon();
float getPrice();
int getWheel() ;//轮子
boolean hasTrailer(); //挂车
};

同理赛车,可能如下:

RaceCar{
string getBand();
int getTon();
float getPrice();
int getPower();
int getAccelerateTime() ;//百米加速时间
};

我们可以用计算机语言这么描述,这就是封装的对象了。

很简单吧。

<未完待续>

比如Truck,虽然都是5座(人),但其载重和轮子会有不同,比如12轮30吨,16轮的55吨等。

以TruckA,TruckB,这相对于Truck而言就更具体的对象了。在实际情况,可能还有更多情况和变化,那么在设计中,就将不便与变化分离,这些变化的因素就应该使用更"虚拟"的方式来封装,保留不便的特征以便在上层设计中定义而不实现,这就叫抽象。设计的基本原则之一就是针对抽象编程,所以抽象是设计的一个基本功。那为什么要用到抽象?如上例,大多数时候,描述的需求是不明确的,也许有的人关注的是suv车...,不一而足。如果我们在设计的时候,要将所有的具体车型都列出来,那是很困难,甚至不可能的。记得软件行业有句话,项目唯一不变的事情就是需求的变化。那如何应对这些变化,抽象就很有了解的必要。


2,如果说封装,抽象,针对对象的个体,那么耦合就是指2个或者多个对象之间的关系。解耦,这里指两个对象之间的关系尽量松耦合。为什么需要解耦?<未完待续>




© 著作权归作者所有

今幕明
粉丝 46
博文 224
码字总数 39350
作品 0
朝阳
程序员
私信 提问
加载中

评论(4)

今幕明
今幕明

引用来自“xmlspyspring”的评论

还是没有缩进,鄙视你13

xmlspyspring
xmlspyspring
还是没有缩进,鄙视你13
今幕明
今幕明

引用来自“xmlspyspring”的评论

看了没缩进的代码,就没心思看了

好吧,其实我是写的伪代码,不过你说的也对,我修改一下
xmlspyspring
xmlspyspring
看了没缩进的代码,就没心思看了
Android之MVVM架构指南(一):导语

之前我在 Android MVP升级路系列的最后一篇文章中提到过有关MVP的没落,虽然有些无奈但没办法这是这样的时代,技术亦如此更何况我们人呢。 很荣幸的是MVP系列的文章得到了好多朋友的回复,其...

吴七禁
2018/10/22
0
0
喜闻乐见-Android LaunchMode

launchMode,通俗点说,就是定义了Activity应该如何被launch的。那么这几种模式的区别以及应用场景,会有何不同呢?谷歌是基于什么原因设计这几种模式的呢?这几种模式背后的工作原理是什么呢...

Q吹个大气球Q
2018/10/01
0
0
android完整资讯App、Kotlin新闻应用MVP + RxJava + Retrofit + Dagger2、优雅区间选择器等源码

Android精选源码 Android完整资讯客户端源码(http://www.apkbus.com/thread-603493-1-1.html) android展示注册进度效果源码(http://www.apkbus.com/thread-603494-1-1.html) Android Wifi热点......

Android爱开源
2018/10/30
0
0
你真的了解Activity的启动模式吗?

引言 当面试官说请你介绍一下activity启动模式,大多数人都能整两句,什么栈顶复用啊栈内复用啊,不过,你确定你真的懂启动模式吗? 如果你能回答出下面的问题,那么你可以直接退出当前界面。...

吴七禁
2018/07/05
0
0
日新月异的Android新技术

学习Android技术开发已经很久啦,感觉Android技术开发太快,几乎每年都有很多新东西出现,想要覆盖所有新东西感觉也不太可能,我这里主要说一下主要的 Android 的主要新技术发展,其实了解 ...

crossmix
2015/11/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微信小程序和百度小程序开发的一些不同点

1: initActive从onload放到onready中 2: bindtap='{{childTickeData.freeadd?"childticket":""}}',语法错误。会导致页面加载不出来,而且也不报任何错。 3:使用搬家工具,支付api名称转换......

醉雨
8分钟前
0
0
最近执行过的SQL语句查询

SELECT TOP 1000 ST.text AS '执行的SQL语句' , QS.execution_count AS '执行次数' , QS.total_elapsed_time / 10000 AS '耗时' , QS.total_logical_reads AS '逻辑读取次数' , QS.total_lo......

神手--追魂
9分钟前
0
0
从濒临解散到浴火重生,OceanBase 这十年经历了什么?

阿里妹导读:谈及国产自研数据库,就不得不提 OceanBase。与很多人想象不同的是,OceanBase 并非衔着金钥匙出生的宠儿。相反,它曾无人看好、困难重重,整个团队甚至数度濒临解散。 从危在旦...

阿里云官方博客
12分钟前
0
0
阿里开发者招聘节 | 面试题02-04:给定一个二叉搜索树(BST),找到树中第K小的节点

为帮助开发者们提升面试技能、有机会入职阿里,云栖社区特别制作了这个专辑——阿里巴巴资深技术专家们结合多年的工作、面试经验总结提炼而成的面试真题这一次将陆续放出(面试题官方参考答案...

阿里云云栖社区
29分钟前
1
0
使用Redis SETNX 命令实现分布式锁

基于setnx和getset http://blog.csdn.net/lihao21/article/details/49104695 使用Redis的 SETNX 命令可以实现分布式锁,下文介绍其实现方法。 SETNX命令简介 命令格式 SETNX key value 将 ke...

彬彬公子
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部