随笔分类 -  面向对象

一定要搞懂
摘要:自从Rails框架问世后,Ruby一举成为了一个令不少人赞赏的编程语言。在这篇文章中,来自Merb与Rails核心开发团队的Yehuda Katz向我们分享了十大令人喜爱的Ruby语言特点。我每天都要用 Ruby 工作,久而久之,我现在真的喜欢上使用它了。(51CTO编者注:本文作者Yehuda Katz是Ruby on Rails核心开发团队的成员,以及Merb项目的主要推动者。)下面是一个列表,列出了我最喜欢的 Ruby 语言特点。一些特点显而易见,一些特点也存在于其他语言中。分享 Ruby 这些我喜欢的特点,并非是为了和其他语言进行比较和对比。1. 动态类型静态类型语言也有很不错的功能, 阅读全文
posted @ 2011-11-27 03:09 永哥 阅读(480) 评论(0) 推荐(0)
摘要:这里我就不累述 Ruby 语言的历史了。如果您还不了解 Ruby,官方网站 www.ruby-lang.org 是最好的去处。而对于已经了解 Ruby 的各位,我在此给出我爱上这门(相对比较)新的语言的理由。Ruby 是面向对象语言。 这意味着什么呢?的确,关于“什么是 OOP”,每十位程序员当中恐怕就有十二种看法。这个问题我留待您自己判断。而就特征而言,Ruby 提供了机制,将数据和方法封装到对象里,实现了一个类到另一个类的继承机制,还提供对象多态机制。与某些语言(C++、Perl 5 等等)不同的是,Ruby 从一开始的时候就是以面向对象为目标来设计的。Ruby 是“纯正”的 OOP .. 阅读全文
posted @ 2011-11-26 17:58 永哥 阅读(212) 评论(0) 推荐(0)
摘要:OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO (Object-Oriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。 面向对象方法作为一种新型的独具优越性的新方法正引起全世界越来越广泛的关注 阅读全文
posted @ 2011-11-26 00:17 永哥 阅读(1786) 评论(0) 推荐(0)
摘要:implements是一个类实现一个接口用的关键字,他是用来实现接口中定义的抽象方法。 还有几点需要注意: (1)接口可以被多重implements,抽象类只能被单一extends (2)接口只有定义,抽象类可以有定义和实现 (3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见) 比如:people 是一个接口,他里面有say这个方法。public interface people(){ public void say();}但是接口没有方法体。只能通过一个具体的类去实现其中的方法体。比如chinese这个类. 阅读全文
posted @ 2011-11-25 22:05 永哥 阅读(358) 评论(0) 推荐(0)
摘要:FreeRIDENetBeanEclipse搭建Ruby开发环境 阅读全文
posted @ 2011-11-25 21:55 永哥 阅读(166) 评论(0) 推荐(0)
摘要:在OO设计领域,我们知道前人总结了不少的经验,许多的经验在现代软件工程过程中已经被认为是原则来遵守。下面笔者摘抄几项下文涉及到的OO原则的定义。OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开放,对修改关闭。我的理解是,对于一个已有的软件,如果需要扩展,应当在不需修改已有代码的基础上进行。DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程。我的理解是,对于不同层次的编程,高层次暴露给低层次的应当只是接口,而不是它的具体类。A. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象B. 抽 阅读全文
posted @ 2011-11-25 19:11 永哥 阅读(453) 评论(0) 推荐(0)
摘要:简单工厂模式(simple factory)是类的创建模式,又叫静态工厂方法(static factory method)模式。简单工厂模式就是由一个工厂类根据传入的参数决定创建哪一种的产品类。有4个角色工厂类角色:是具体产品类角色直接调用者。 抽象产品角色:接口或抽象类,负责具体产品角色的定义,及与客户端的交互。 具体产品角色:被工厂类创建的对象,也是客户端实际操作对象。 客户端:调用工厂类产生实例,并调用实例的方法进行相应工作。public interface people{public voidsay();}public class chinese implements people{p 阅读全文
posted @ 2011-11-25 18:49 永哥 阅读(167) 评论(0) 推荐(0)
摘要:需求如下: 有这样一家超市,对顾客实行会员制,会员目前分为两个等级:金卡及银卡。 每次会员购物时,都会根据会员等级提供不同的折扣优惠和返点。 设计方案有三个: 1. 过程设计,用作对比 2. 过程式的OO设计,简单来说就是将过程设计中的函数封装到类里面 3. 标准的OO设计,封装、继承、多态、设计模式,能用的都用上 问题: 如果是你,你会采用哪种OO设计,或者有更好的设计? 过程式设计:Java代码 //client:stringid=input_id;stringtype=GetMemberTypeByID();;intdiscount=GetDiscountByType(type)... 阅读全文
posted @ 2011-11-25 18:43 永哥 阅读(206) 评论(0) 推荐(0)
摘要:前一篇Post因为绘图的关系导致理解上有所误区,所以重构一下,重新更新了图形,让我们重新来审视一下这个被多次讨论的设计。首先是图书馆的用例:其实用例的情况大家都很清楚了,简而概之就是用户在图书馆的书架上找到自己想要的书,然后向管理员出示借书卡后借到想要的书。用例图。这是一个很简单的用例,我没有分析完所有的用例以及子用例,这里到此就可以打住了,我们可以在以后的迭代过程当中来继续完善然后根据需求我们来建立业务规则表:规则一:借书需要出示身份证明以及借书卡 (来源:图书馆馆规)规则二:每个用户一张借书卡 (来源:图书馆规定)规则三:每张借书卡可以借N本书 (来源:图书馆规定)然后得到领域模型:这 个 阅读全文
posted @ 2011-11-25 17:44 永哥 阅读(273) 评论(0) 推荐(0)
摘要:在大学里的某一天,一个漆黑的夜晚,我来到了一个学校里阴森的图书馆,虽然说不喜欢,但是为了考试不要零蛋,所以拼死也要温书了。来到图书馆的柜台前,遇到了图书管理员。然后我跟管理员说:“我来借书了”,管理员头也不抬的把手一指:“书架在那边,自己去找”。-----------------------------------------------------------------------------------------------------------------------------------------------------------------书架实在是很多,都是分门别类的把 阅读全文
posted @ 2011-11-25 17:43 永哥 阅读(388) 评论(0) 推荐(0)
摘要:问:看了网络上的说法:一个方法要有一个返回类型,比如String, int等,如果这个方法只是执行了一个操作不返回结果,就把返回类型设置为void,表示什么都不返回,只是执行了一个操作 。-------------------------------------例如方法是string,那需要返回。那我想问返回干嘛,有什麼用?答:一般函数都是被用来调用的,返回值就是你调用函数的运行结果。 变量是具有作用域的,一般在函数里面声明的变量的作用域即是在函数里面,函数运行结束以后就会消失,这时候返回一个值就可以使你获取到函数的运行结果。当然,你可以不用返回值,设置全局变量或者是通过传递引用参数来获取.. 阅读全文
posted @ 2011-11-25 17:24 永哥 阅读(1252) 评论(0) 推荐(0)
摘要:首先什么是封装就不用多说了,上次说到,类是用来描述是什么,属性表示有什么,而行为表示能够执行什么动作的时候没有进一步对如何封装这些概念来做进一步的阐述。 对属性的封装: 属性表示对象的状态,而状态在程序里是使用数据来表示的,所以类中使用变量的来存储。所以一个类的内部成员变量是用来存储对象的状态的。 为了封装状态,我们需要将变量的访问性设置为private。 但是很多时候对象的某些状态是需要外界可见的(外部可见的状态,很容易理解,如果对象的状态都不清楚,那不是两眼一抹黑闷头操作),打个比方,汽车对象, 起码来说,当前跑的速度,车身颜色,车牌号码都应该是外部能够了解的状态。那么,在java中,只. 阅读全文
posted @ 2011-11-25 17:08 永哥 阅读(166) 评论(0) 推荐(0)
摘要:问:public String getPassword() { return password; } public void setPassword(String password) { this.password = password;第一步的return返回什么第二步的 this怎么解释答:你前面应该定义了password这个字段并且为String 类型的,类似这样:private String password;其实getPassword()和setPassword()是对你定义的password进行取值和赋值,这两个方法执行的顺序是这样的:首先执行setPassword();//对.. 阅读全文
posted @ 2011-11-25 15:40 永哥 阅读(2257) 评论(0) 推荐(0)
摘要:当类声明了私有成员时,如果需要 获取(get) 或 设置(set) 这个私有成员的值,可以为这个私有成员编写get或set 方法 package cn.itcast.domain;import java.util.Date;public class User { private String username; private String password; private String gender; private Date birthday; private String email; public String getUsername() { return username; } . 阅读全文
posted @ 2011-11-25 15:31 永哥 阅读(474) 评论(0) 推荐(0)
摘要:最近针对OO有了太多的讨论,太多的误会,太多的不理解。让我来一次性解决什么是对象,为什么要面向对象的问题吧,这是第一篇。所谓面向对象的编程、设计、思想。我们用大白话来说。面向对象就是用 某物(对象),是什么(类),有什么(对象的状态),能干什么(方法)的方式来描述程序的方法。这就是面向对象。面向对象的程序的特征,封装性:也就是某物状态的改变,必须是他自己的行为来改变。打个比方,我(人类),有钱(有什么),你(人类),要找我借钱(能干什么)。于是class Man() { private int money; public int Money { get{return money} s... 阅读全文
posted @ 2011-11-25 15:05 永哥 阅读(278) 评论(0) 推荐(0)
摘要:你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起 。 ----- Arthur J.Riel (1)所有数据都应该隐藏在所在的类的内部。 (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。 (3)尽量减少类的协议中的消息。 (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。 (5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。 如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数。 ... 阅读全文
posted @ 2011-11-25 04:34 永哥 阅读(157) 评论(0) 推荐(0)
摘要:在我的前两篇随笔中,我大概的陈述了一下我对面向对象设计的一些想法。本人拙于言,不善表达,写文章陈述观点这种技术活就更不擅长了,如果在文章中有什么 表述不清之处,还请各位海涵。此外,非常欢迎大家对我的文章点评,无论是赞扬、还是批评我都笑纳,多多益善,如果有探讨类型的评论就更好了。 从《颠覆传统-面向对象的设计思想(序章)》和《颠覆传统-面向对象的设计思想(序章续)》的评论来看,对这两篇随笔持不同意见的主要原因是设计和需求之间关系的问题,很多朋友都在他们的评论中一再重申需求的重要性,认为需求和设计密不可分,需求是设计之母,离开需求谈设计都是空谈。 谁也不能说这些观点是错的,但是说这些有用... 阅读全文
posted @ 2011-11-25 03:38 永哥 阅读(165) 评论(0) 推荐(0)
摘要:自从《颠覆传统-面向对象的设计思想(序章)》发布出来后看的朋友和评论的朋友很多,有说好的,也有说不好。当然也有很多朋友在文章的评论中发表了自己的见解,在这里我就一些比较典型的评论做一下解释。来自名为wanghualiang 的评论很佩服楼主的发散型思维。但是远远还没到颠覆传统的地步。这里谈谈我的观点,面向对象设计时完全从接口来描述对象本身的特性是不是有问题。从鱼是不是可吃应该只能作为其一个属性来辨识,ClassFish{publicboolIsEatable;}当客户想吃这条鱼的时候,IsEatable=true;如果是河豚的话就是False了。当然有许多种不确定的因素,在可吃不可吃之间。那. 阅读全文
posted @ 2011-11-25 03:10 永哥 阅读(177) 评论(0) 推荐(0)
摘要:从我们最初接触面向对象思想的时候,我想我们接触到的第一个概念应该就是“类”,我们一直在讨论诸如如何设计类、如何实现类等高深的问题,但是我们有没有思索过到底什么叫做“类”,类的本质是什么?。按照大多数的面向对象的书籍中的介绍来看,类就是一个数据结构,封装了数据和操作,对于这样的答案,我估计大家都不会满意。 那到底什么是类呢?在讨论这个问题之前,我们先探讨一下类的由来。“类”在英语对应的单词是“Class”,如果大家翻一翻英语词典就可以查到“Class”的原意是指“种类、把...分类(或分等级)”。Class的概念最早应该是从分类学来的,意思是把对象进行归类(说的可能有些不太准确,欢迎那位高人指. 阅读全文
posted @ 2011-11-24 22:37 永哥 阅读(162) 评论(0) 推荐(0)
摘要:GoF的起源 《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。这几位作者常被称为"四人组(Gang of Four)",而这本书也就被称为"四人组(或 GoF)"书。 在《设计模 式》这本书的最大部分是一个目录,该目录列举并描述了 23 种设计模式。另外,近来这一清单又增加了一些类别,最 阅读全文
posted @ 2011-11-24 14:41 永哥 阅读(1280) 评论(0) 推荐(0)