设计思想
来源:yesky 发布时间:2006-12-9
编程模型
所有计算机均由两种元素组成:代码和数据.精确的说,有些程序是围绕着"什么正在发生"而编写,有些则是围绕"谁正在受影响"而编写的。
第一种编程方式叫做"面向过程的模型",按这种模型编写的程序以一系列的线性步骤(代码)为特征,可被理解为作用于数据的代码.如 C 等过程化语言。
第二种编程方式叫做"面向对象的模型",按这种模型编写的程序围绕着程序的数据(对象)和针对该对象而严格定义的接口来组织程序,它的特点是数据控制代码的访问.通过把控制权转移到数据上,面向对象的模型在组织方式上有:抽象,封装,继承和多态的好处.
抽象
面向对象程序设计的基本要素是抽象,程序员通过抽象来管理复杂性。
管理抽象的有效方法是使用层次式的分类特性,这种方法允许用户根据物理含义分解一个复杂的系统,把它划分成更容易管理的块.例如,一个计算机系统是一个独立的对象.而在计算机系统内部由几个子系统组成:显示器,键盘,硬盘驱动器,DVD-ROM,软盘,音响等,这些子系统每个又由专门的部件组成.关键是需要使用层次抽象来管理计算机系统(或其他任何复杂系统)的复杂性。
面向对象程序设计的本质:这些抽象的对象可以被看作具体的实体,这些实体对用来告诉我们作什么的消息进行响应。
/* (我的理解)
*计算机是一个实体,我要输入字符,显示器显示出来,那么
*计算机(对象).输入(键盘属性).显示(显示方法)
*使用分层来引用,操作.而不用管计算机内部如何处理.
*只要有计算机对象,它就能响应我的操作,而我敲键盘,
*计算机对象就把这个消息传给屏幕,屏幕显示.
*/
计算机对象包含了它所有的属性,以及操作,这就是面向对象程序设计的三大原则之一:封装.
封装
封装是一种把代码和代码所操作的数据捆绑在一起,使这两者不受外界干扰和误用的机制.封装可被理解为一种用做保护的包装器,以防止代码和数据被包装器外部所定义的其他代码任意访问.对包装器内部代码与数据的访问通过一个明确定义的接口来控制.封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,同时不用担心不可预料的副作用。
在JAVA中,最基本的封装单元是类,一个类定义着将由一组对象所共享的行为(数据和代码).一个类的每个对象均包含它所定义的结构与行为,这些对象就好象是一个模子铸造出来的.所以对象也叫做类的实例。
在定义一个类时,需要指定构成该类的代码与数据.特别是,类所定义的对象叫做成员变量或实例变量.操作数据的代码叫做成员方法.方法定义怎样使用成员变量,这意味着类的行为和接口要由操作实例数据的方法来定义。
由于类的用途是封装复杂性,所以类的内部有隐藏实现复杂性的机制.所以JAVA中提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的每件东西.私有的方法数据只能通过该类的成员代码来访问.这就可以确保不会发生不希望的事情。
继承
继承是指一个对象从另一个对象中获得属性的过程.是面向对象程序设计的三大原则之二,它支持按层次分类的概念.例如,波斯猫是猫的一种,猫又是哺乳动物的一种,哺乳动物又是动物的一种.如果不使用层次的概念,每个对象需要明确定义各自的全部特征.通过层次分类方式,一个对象只需要在它的类中定义是它成为唯一的 各个属性,然后从父类中继承它的通用属性.因此,正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例.一个深度继承的子类将继承它在类层次中的每个祖先的所有属性。
继承与封装可以互相作用.如果一个给定的类封装了某些属性,它的任何子类将会含有同样得属性,另加各个子类所有得属性.这是面向对象程序在复杂性上呈线性而非几何增长的一个重要概念.新的子类继承其所有祖先的所有属性.子类和系统中的其他代码不会产生无法预料的交互作用。
多态
多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用"一个接口,多个方法"来描述.可以通过方法的参数和类型引用。
封装,继承,多态的组合使用
在由封装,继承,多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序.经过仔细设计的类层次结构是重用代码的基础.封装能让程序员不必修改公有接口的代码即可实现程序的移植.多态能使程序员开发出简洁,易懂,易修改的代码.例如:汽车
从继承的角度看,驾驶员都依靠继承性来驾驶不同类型(子类)的汽车,无论这辆车是轿车还是卡车,是奔驰牌还是菲亚特牌,驾驶员都能找到方向盘,手刹,换档器.经过一段时间驾驶后,都能知道手动档与自动档之间的差别,因为他们实际上都知道这两者的共同超类:传动装置.
从封装的角度看,驾驶员总是看到封装好的特性.刹车隐藏了许多复杂性,其外观如此简单,用脚就能操作它.发动机,手刹,轮胎大小的实现对与刹车类的定义没有影响。
从多态的角度看,刹车系统有正锁反锁之分,驾驶员只用脚踩刹车停车,同样的接口可以用来控制若干种不同的实现(正锁或反锁).
这样各个独立的构件才被转换为汽车这个对象的.同样,通过使用面向对象的设计原则,程序员可以把一个复杂程序的各个构件组合在一起,形成一个一致,健壮,可维护的程序。
分享到:
相关推荐
3. **Hadoop部署与升级**:`http://www.slideshare.net/steve_l/dynamic-hadoop-clusters`, `http://zkl-1987.javaeye.com/blog/365172`, `http://www.javaeye.com/topic/365172` - 提供了Hadoop集群部署的最佳实践...
3. **参考文章**:《Flex企业级信息系统开发》[http://www.javaeye.com/topic/109883](http://www.javaeye.com/topic/109883) - 该文章主要介绍了使用Flex开发企业级信息系统的实践经验和技术要点,对于想要深入...
4. 谁告诉我extjs官方网站上按需下载js库的页面在哪里(http://www.javaeye.com/wiki/topic/166010) 通过这些资料,开发者可以深入理解EXT-JS的加载机制,找到优化加载速度的方法,并运用在线Build工具进行实践,...
- **Ruby操作Excel**:`http://www.javaeye.com/topic/46768` 提供了Ruby操作Excel的方法。 - **Ruby自带教程**:位于 `C:\ruby\doc\ProgrammingRuby.chm` ,提供了详细的Ruby教程。 - **Ruby自带示例**:位于 `C:\...
**ZDNet** - http://forums.zdnet.com.cn/cgi-bin/topic.cgi?forum=45&topic=2 ZDNet是一个全球知名的科技新闻和评论网站,其论坛包含Java和其他技术领域的讨论。 #### 20. **SpringSide** - ...
原址:http://www.javaeye.com/topic/211875 其他:http://www.17ext.com/showtopic-2753.aspx 欢迎加入QQ群:62150370 进行extjs的讨论 如果你没有安装mysql5.0,在安装数据库时,请把root密码设置为neostudio 如果已...
原址:http://www.javaeye.com/topic/211875 其他:http://www.17ext.com/showtopic-2753.aspx 欢迎加入QQ群:62150370 进行extjs的讨论 如果你没有安装mysql5.0,在安装数据库时,请把root密码设置为neostudio 如果已...
原址:http://www.javaeye.com/topic/211875 其他:http://www.17ext.com/showtopic-2753.aspx 讨论Q_群:62150370(群1) 76202406(群2) 91986229(群3) 一起讨论 如果你没有安装mysql5.0,在安装数据库时,请把root密码...
http://www.javaeye.com/topic/52975 只不过有些不同: 1. 我的spring使用myeclipse向导加入的2.5版本 (附件中不包含) 2. 我加入的是(源代码中已存在): acegi-security-1.0.7.jar 加入了数据库驱动(mysql5...
---javaeye相关地址:http://www.javaeye.com/topic/379655 ---Java版山寨星际 做了一大堆J2EE WEB应用之后,闲来无事决定研究一下桌面应用程序开发。 想了一下干脆做个Java版的星际,研究的对象就是星际的JS山寨版...
### Android SDK开发环境搭建知识点详解 ...- [JavaEye Wiki](http://www.javaeye.com/wiki/topic/689383) 通过以上步骤,您可以成功地搭建一套基本的Android开发环境,为开发应用程序打下坚实的基础。
转自 http://www.javaeye.com/topic/890512 MyEclipse6.5的反编译插件的安装 我的MyEclipse6.5的安 装目录是D:\MyEclipse 6.5,以下仅供参考 第一步: 下载jad.exe(Jad v1.5.8g版本)和net.sf.jadclipse_3.3.0.jar;...
Flexigrid-Web2.0 jQuery表格插件 Flexigrid 是一个轻量级的Web2.0 jQuery插件。它包含很多非常Cool的特性,如主题定制、分页、工具栏、搜索、排序、ajax读取数据源、调整列宽...http://www.javaeye.com/topic/414611
ruby勇士,初学者边游戏边学习ruby的好玩的东西。具体玩法在 http://www.javaeye.com/topic/383938,或者Google一下“ruby勇士”。因为下载游戏的网站有时访问不了,上传一下提供下载。
- [XML解析-JDOM](http://www.javaeye.com/topic/233911) - [XPath-JDOM](http://8366.javaeye.com/blog/354547) - [JDOM环境配置](http://qzone.qq.com/blog/21243296-1230278127) #### 四、结论 - 本文档提供...
- [JavaEye论坛关于PermGen space的讨论](http://www.javaeye.com/topic/80620?page=1) - [Sohu博客关于PermGen space的解释](http://ggmm.blog.sohu.com/117545379.html) - [百度博客关于JVM内存管理的文章]...
- [参考链接](http://www.javaeye.com/topic/552177) - **Step 2**: 配置KindEditor的使用方法。 - [参考链接](http://jonney-82.javaeye.com/blog/447579) - **Step 3**: 修改特定文件中的路径配置。 - 修改`...
- JavaEye 主键生成策略讨论: http://www.javaeye.com/topic/93391 通过理解并熟练掌握 `hbm.xml` 文件的配置,开发者可以有效地利用 Hibernate 实现对象与数据库之间的无缝映射,提高开发效率并减少数据库操作的...
参考提供的网址,如`http://www.pjprimer.com/view-1019-1.html`和`http://www.javaeye.com/topic/640468`,你可以找到更详细的步骤和解决问题的方法。 总的来说,安装GWT并使用MyEclipse进行开发是一项相对简单的...
http://www.javaeye.com/topic/128973 1 struts2表单标签 1 1、struts资源文件中文解决方法 1 2、开发struts2流程 1 3、创建拦截器: 2 4.标签中引用资源文件内容 3 5.创建资源文件 3 6.Action中访问servlet API 3...