Nice TWiki > Doc > FunctionalApproachExample (r1.1 vs. r1.7) TWiki webs:
Dev | Doc | Main | TWiki | Sandbox
Doc . { Changes | Index | Search | Go }
 <<O>>  Difference Topic FunctionalApproachExample (r1.7 - 28 Apr 2005 - TWikiGuest)
Deleted:
<
<

天津货运 天津物流 不锈钢 打印机 钢结构 计算机 加盟 建筑材料 旅行社 企业管理 人力资源 网页设计 市场营销 室内设计 手机 饲料 涂料 卫星电视 物流 远程教育 展览 包装机械 包装设计 玻璃钢 瓷砖 地板 电池 电动工具 电话 电缆 电器 电线电缆 电源 雕塑 耳机 二手电脑 二手房 发电机 防盗门 纺织 机票 复印机 钢铁 工程机械 广告设计 继电器 家电 建筑设计 交换机 洁具 开关 乐器 木地板 皮革 啤酒 润滑油 摄像机 摄像头 数码摄像机 塑料机械 体育用品 网络电话 望远镜 文具 五金工具 显示器 相机 香水 蓄电池 仪表 中央空调 珠宝 平面设计 传感器 摩托车 玻璃 电机 工艺品 化工 化妆品 机械 空调 时装 食品 塑料 陶瓷 玩具 五金 印刷 轴承 钢材 汽车配件 橡胶 变压器 订房 订票 水处理 显示屏 礼品 旅游 汽车 服装 电影 数码相机 稳压器 招聘 触摸屏 机柜 酒店预定 模具 在线电影 笔记本 虚拟主机 管理咨询 域名注册 成人电影 肾病 免费电影 肿瘤 显微镜 婚介 股票 交换机 糖尿病 企业邮箱 乙肝 对讲机 化妆品 股骨头坏死 电子商务 网站推广 美女 UPS 液晶 尿毒症 条码打印机 电脑 家具 投影幕 服饰 网站空间 轮胎 网上购物 化学试剂 媒体 手套 二手笔记本 发动机 免费下载电影 水泥 塑料制品 机床 免费音乐下载 随身听 防水材料 纺织机械 耐火材料 肺结核 肺炎 风机 家居装饰 脱发 钢板 汽车美容 网络电话 监理 减速机 钢板网 钢管 网络设备 洗衣机 显卡 刀具 电视机 锅炉 二手车 滑板 眼镜 办公用品 防盗门 仪器 保温材料 继电器 变频器 办公家具 货运 高尔夫 叉车 插件 超声 泳装 箱包 小提琴 冲压 除湿机 油漆 小尾寒羊 元器件 磁性材料 刺绣 运动鞋 型材 打火机 打折机票 灯泡 电子产品 电子技术 垫仓板 吊钩 吊网 合成纤维吊装带 烘干机 胶带 结核 咖啡 空压机 冷却塔 热水器 日用品 乳品机械 石材 食品机械 收音机 手表 化工原料 多电脑切换器 茶叶 医疗设备 微型打印机 饮水机 污水处理 印刷机 冰箱 财务软件 彩钢板 音响 仓储 木制品 遥控器 摄影器材 数码产品 床上用品 面料 拉链 机箱 包装材料 涂装 水表 管理培训 门窗 破碎机 自动门 自吸泵 硬盘 绿色食品 燃气设备 容器 软管 木业


 <<O>>  Difference Topic FunctionalApproachExample (r1.6 - 31 Jan 2005 - LiYan)
Added:
>
>

天津货运 天津物流 不锈钢 打印机 钢结构 计算机 加盟 建筑材料 旅行社 企业管理 人力资源 网页设计 市场营销 室内设计 手机 饲料 涂料 卫星电视 物流 远程教育 展览 包装机械 包装设计 玻璃钢 瓷砖 地板 电池 电动工具 电话 电缆 电器 电线电缆 电源 雕塑 耳机 二手电脑 二手房 发电机 防盗门 纺织 机票 复印机 钢铁 工程机械 广告设计 继电器 家电 建筑设计 交换机 洁具 开关 乐器 木地板 皮革 啤酒 润滑油 摄像机 摄像头 数码摄像机 塑料机械 体育用品 网络电话 望远镜 文具 五金工具 显示器 相机 香水 蓄电池 仪表 中央空调 珠宝 平面设计 传感器 摩托车 玻璃 电机 工艺品 化工 化妆品 机械 空调 时装 食品 塑料 陶瓷 玩具 五金 印刷 轴承 钢材 汽车配件 橡胶 变压器 订房 订票 水处理 显示屏 礼品 旅游 汽车 服装 电影 数码相机 稳压器 招聘 触摸屏 机柜 酒店预定 模具 在线电影 笔记本 虚拟主机 管理咨询 域名注册 成人电影 肾病 免费电影 肿瘤 显微镜 婚介 股票 交换机 糖尿病 企业邮箱 乙肝 对讲机 化妆品 股骨头坏死 电子商务 网站推广 美女 UPS 液晶 尿毒症 条码打印机 电脑 家具 投影幕 服饰 网站空间 轮胎 网上购物 化学试剂 媒体 手套 二手笔记本 发动机 免费下载电影 水泥 塑料制品 机床 免费音乐下载 随身听 防水材料 纺织机械 耐火材料 肺结核 肺炎 风机 家居装饰 脱发 钢板 汽车美容 网络电话 监理 减速机 钢板网 钢管 网络设备 洗衣机 显卡 刀具 电视机 锅炉 二手车 滑板 眼镜 办公用品 防盗门 仪器 保温材料 继电器 变频器 办公家具 货运 高尔夫 叉车 插件 超声 泳装 箱包 小提琴 冲压 除湿机 油漆 小尾寒羊 元器件 磁性材料 刺绣 运动鞋 型材 打火机 打折机票 灯泡 电子产品 电子技术 垫仓板 吊钩 吊网 合成纤维吊装带 烘干机 胶带 结核 咖啡 空压机 冷却塔 热水器 日用品 乳品机械 石材 食品机械 收音机 手表 化工原料 多电脑切换器 茶叶 医疗设备 微型打印机 饮水机 污水处理 印刷机 冰箱 财务软件 彩钢板 音响 仓储 木制品 遥控器 摄影器材 数码产品 床上用品 面料 拉链 机箱 包装材料 涂装 水表 管理培训 门窗 破碎机 自动门 自吸泵 硬盘 绿色食品 燃气设备 容器 软管 木业


 <<O>>  Difference Topic FunctionalApproachExample (r1.5 - 23 Jan 2005 - TWikiGuest)
Added:
>
>


 <<O>>  Difference Topic FunctionalApproachExample (r1.4 - 14 Feb 2004 - IsaacGouy)
Changed:
<
<

// Functional Approach: Tools //---------------------------

>
>

// Functional Approach: Operations //--------------------------------

Changed:
<
<

======================================== Can we add a type and tool without modifying

>
>

============================================= Can we add a type and operation without modifying

Changed:
<
<

========================================

>
>

=============================================

Changed:
<
<

// Functional Approach: Adding Tools //----------------------------------

>
>

// Functional Approach: Adding Operations //---------------------------------------


 <<O>>  Difference Topic FunctionalApproachExample (r1.3 - 06 Feb 2004 - IsaacGouy)
Added:
>
>

%META:TOPICMOVED{by="IsaacGouy" date="1076083067" from="Doc.FunctionalReuseExample" to="Doc.FunctionalApproachExample"}%


 <<O>>  Difference Topic FunctionalApproachExample (r1.2 - 06 Feb 2004 - IsaacGouy)
Changed:
<
<

%META:TOPICPARENT{name="VisitorMultiMethodExample"}%

>
>

%META:TOPICPARENT{name="VisitorPatternMultiMethodExample"}%


 <<O>>  Difference Topic FunctionalApproachExample (r1.1 - 06 Feb 2004 - IsaacGouy)
Added:
>
>

%META:TOPICINFO{author="IsaacGouy" date="1076042398" format="1.0" version="1.1"}% %META:TOPICPARENT{name="VisitorMultiMethodExample"}%

/* Please try the NoviceExamples before the MultiMethodExamples
To compile:
   nicec --sourcepath .. -a functional.jar functional
To run:
   java -jar functional.jar
*/


// Functional Approach: Types
//---------------------------

abstract class Shape {}
class Square extends Shape { double side; }
class Circle extends Shape { double radius; }
class Translated extends Shape { Point d; Shape shape; }

class Point { double x; double y; }



// Functional Approach: Tools
//---------------------------

boolean containsPoint(Shape s, Point p);

containsPoint(Square s, p){
   let d = s.side/2;
   return 
      (p.x >= -d && p.x < d) && 
      (p.y >= -d && p.y < d);
}

containsPoint(Circle s, p) = 
   // just test the bounding box     
   (p.x >= -s.radius && p.x < s.radius) && 
   (p.y >= -s.radius && p.y < s.radius);


containsPoint(Translated s, p){
   let p' = 
      new Point(
         x: p.x - s.d.x,
         y: p.y - s.d.y );
 
   return s.shape.containsPoint(p');
}



/*
   ============================================
   Can we add a type and tool without modifying 
   the original code?
   ============================================ 
*/


// Functional Approach: Adding Type Variants
//------------------------------------------

/* 
   Generally, in a functional approach we would
   need to modify the original source code.
*/ 


// Functional Approach: Adding Tools
//----------------------------------

Shape shrink(Shape s, double toPercent);

shrink(Square s, toPercent) = 
   new Square(side: (s.side*toPercent)/100 );

shrink(Circle s, toPercent) = 
   new Circle(radius: (s.radius*toPercent)/100 );

shrink(Translated s, toPercent) = 
   new Translated(d: s.d, shape: s.shape.shrink(toPercent) );



// Functional Approach: Testing
//-----------------------------

void main(String[] args){
   let s = new Square(side: 4);
   let c = new Circle(radius: 2);

   let t = 
      new Translated(
         d: new Point(x: 1.5, y: 0),  
         shape: c 
         );

   let p = new Point(x: 3, y: 0);
   println("square contains point " + s.containsPoint(p));
   println("circle contains point " + c.containsPoint(p));
   println("translated contains point " + t.containsPoint(p));

   let t' = t.shrink(toPercent: 50); 
   println("shrunk translated contains point " + t'.containsPoint(p));
}


/* Notes 
See the detailed discussion in
"Synthesizing Object-Oriented and Functional Design to Promote Re-use"
Section 2.1 figures 1, 2, 3
http://citeseer.nj.nec.com/krishnamurthi98synthesizing.html


square contains point false
circle contains point false
translated contains point true
shrunk translated contains point false

*/
-- IsaacGouy - 06 Feb 2004

Topic FunctionalApproachExample . { View | Diffs | r1.7 | > | r1.6 | > | r1.5 | More }
Revision r1.1 - 06 Feb 2004 - 04:39 GMT - IsaacGouy
Revision r1.7 - 28 Apr 2005 - 11:50 GMT - TWikiGuest
Copyright © 1999-2003 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback.