public String getName(); public void setName(); public void say(String word); public void write(String word); public void read(String word); public void jump(); public void run(); public void walk(); public void addFriend(IPreson friend); public void removeFriend(IPerson friend); public IPerson[] getAllFriends(); public void clearAllFriends(); public boolean hasFriend(IPerson friend);
} 采用面向能力模式的设计示例
public interface IPerson extends IWordable, IMovable, IFriendable{
public String getName(); public void setName();
}
public interface IWordable{
public void say(String word); public void write(String word); public void read(String word); }
public interface IMovable{
public void jump(); public void run(); public void walk();
}
public interface IFriendable{
public void addFriend(IPreson friend); public void removeFriend(IPerson friend); public IPerson[] getAllFriends(); public void clearAllFriends(); public boolean hasFriend(IPerson friend); }
嘿嘿
留心世间“万事万物”。OO设计思想就培养成了。
发几个我学OO时好玩的问题, 有些是自己胡思乱想, 有些是面试题等:如何用继承实现:
让大毛长得像父亲 ,二毛言行像父亲 (PS:他们都是亲生的)感恩节那天突然想到了火鸡:
火鸡会飞,但又是鸡,应该放在鸡类还是鸟类,它的行为(飞行)如何控制?用OO解释:先有鸡还是先有蛋? [一道面试题]奥特曼很流行(虽然我不是很喜欢), 他在OO里也还是有看头滴,他的状态忒多, 招数也不少。有一天俺正在学设计模式,想到此物(人),
他可以适应环境,可以调整自己的招式等, 我就想, 他要来中国学几天Chinese kungfu, 招数又要增加, 应该如何适应这种后期的变化呢?[还好有设计模式]同上面类似, 如果能设计出悟空那也了得, 大圣的状态比Aultman多吧!!我觉得OO没有设计模式, 就像个空架子, 体现不出来真正的威力, 所以要掌握好OO设计思想, 设计模式是必经之路
要培养完全的oo思想,得要用完全oo得思想去生活
比如我再吃饭
我是人类中的一个对象,生在调用吃这个方法。吃的东西就是这个方法的参数。
Then,we trust
接口是用来表达能力的.问题
在软件的架构细节设计中经常会要设计功能较为复杂的接口, 这样的接口往往用来抽象顶层功能实体, 要求抽象实体的各种功能, 经常会导致在接口中描述的方法过多, 降低了接口的抽象性, 同时这样的接口一般情况下也不具备复用的条件.
设计模式说明
根据 接口应该描述行为, 而非属性 原则, 可以将复杂接口中的方法再进一步抽象分类, 并采用 实体抽象 = 实体能力1描述 + 实体能力2描述 + .. + 实体能n描述 的方式将复杂接口分解为若干用于描述能力的接口, 而后利用接口继承关系来最终描述实体. 简单说明如下:
原始接口设计示例
public interface IPerson {
public String getName();
public void setName();
public void say(String word);
public void write(String word);
public void read(String word);
public void jump();
public void run();
public void walk();
public void addFriend(IPreson friend);
public void removeFriend(IPerson friend);
public IPerson[] getAllFriends();
public void clearAllFriends();
public boolean hasFriend(IPerson friend);
}
采用面向能力模式的设计示例
public interface IPerson extends IWordable, IMovable, IFriendable{
public String getName();
public void setName();
}
public interface IWordable{
public void say(String word);
public void write(String word);
public void read(String word);
}
public interface IMovable{
public void jump();
public void run();
public void walk();
}
public interface IFriendable{
public void addFriend(IPreson friend);
public void removeFriend(IPerson friend);
public IPerson[] getAllFriends();
public void clearAllFriends();
public boolean hasFriend(IPerson friend);
}
巧的是大后天也是我的生日.其实为什么不OO呢?
OO其实比不OO还要难,因为OO的抽象层次更高.
相较过程化编程而言,OO设计更容易让我们接受.
但不好接受的是OO的代码,OO代码干扰了我们OO的设计.我们意思是:我们设计,思想时OO更符合心智.但我们在Coding时必需采用过程化的代码,去抽象我们的OO,故通常在高级抽象->低级实现间,我们迷失了.
1,其实没必然完全OO,这样丝毫没有意义.不必为了OO而OO;
2,心情不好可以听一首歌<bad day>, Just had a bad day.
Happy Birthday!