先来聊聊张孝祥老师说的那个面向对象的东西:
谁拥有数据,谁就能提供操作这些数据的方法
请分析下面例子的所有类和方法
例子1:
人在黑板上画圆
类很简单 有 Person Blackboard circle
想当然的认为 画圆 这个动作当然是人所拥有的
其实不然
画圆需要什么?
需要的是圆的半径和圆的圆心,这两个数据是属于圆的 而不是属于人的 。
而这是圆所具有的,所以需要用圆去操作它自己的数据,所以画圆这个动作是需要圆自己去实现的
但是人可以去调用这个圆的方法。
例子2:
司机踩刹车
类:司机,车
但是踩刹车这个动作是由谁来完成的呢?再细分点 踩是有司机来完成 但是 刹车是由汽车来完成的
司机只是调用(踩)汽车的刹车的功能。
例子3:
两块石头磨成石刀,石刀砍树,树变成木材,木材可以做成椅子。
首先乍眼一看 有以下几个类
Stone
StoneKnife
Tree
material
Chair
分析:
石头磨成石刀 ,石头没了变成了石刀,刚开始以为是石头类的功能,但是这里应该定义一个石头加工厂的类 StoneFactory 并在其中定义一个静态方法 MakeStoneKnife
的方法 StoneKnife StoneFactory.MakeStoneKnife(Stone s1 ,Stone s2)
石刀砍树,树变成木材,应该Stoneknife类中定义一个(静态方法 如果没指定用哪把刀)方法 cut 函数定义为 material Stoneknife.cut(Tree t);
木材可以做成椅子,木材没了,这又是一种加工厂的概念,应该定义为 Chair ChairFactory.makeChair(material m)
综上所述:
应该有以下类和方法
Stone StoneFactory StoneKnife StoneFactory.MakeStoneKnife(Stone s1 ,Stone s2)
StoneKnife
Tree
material material Stoneknife.cut(Tree t)
Chair Chair ChairFactory.makeChair(material m)