使用面向对象重构之-从过程式设计到面向对象
2017-02-23 22:52
260 查看
写在前面
最近两年接手的几个C#和java的project,发现目前很多程序员的编程思维中,几乎没有用到对象和抽象的力量,扩展和修改起来非常困难,甚至阅读都有困难。决定写一个面向对象基础专栏,笔者希望能把这几次重构中所发现的问题,尤其是涉及到面向对象几个重要的基础知识说明清楚,让初学者能够明白并应用到项目中去。本系列文章的所有示例代码为C#。
第一步:从过程设计到对象
以下是一种典型的面向过程设计的编程风格。类名以management,Processing为结尾的通常都是过程式设计产生的。
引入对象。
首先以上代码创建了若干类,
leave:请假对象
employee:员工对象
manager:经理对象
其次做了方法提取。把management类中的方法分配在了不同的对象中。这样就完成了重构的第一步,也是我们开始使用OO力量的开始。
在接下来的文章中,需求会稍微有些变化,会介绍如何使用不同的面向对象技巧来应对变化,适应变化。
最近两年接手的几个C#和java的project,发现目前很多程序员的编程思维中,几乎没有用到对象和抽象的力量,扩展和修改起来非常困难,甚至阅读都有困难。决定写一个面向对象基础专栏,笔者希望能把这几次重构中所发现的问题,尤其是涉及到面向对象几个重要的基础知识说明清楚,让初学者能够明白并应用到项目中去。本系列文章的所有示例代码为C#。
第一步:从过程设计到对象
以下是一种典型的面向过程设计的编程风格。类名以management,Processing为结尾的通常都是过程式设计产生的。
public class LeaveManagement { public IEnumerable<Leave> GetLeavesByUserId(string userId) { ... } public Leave GetLeave(Guid id) { ... } public bool ApproveLeave(Leave leave) { ... } public bool RejectLeave(Leave leave) { ... } // ... } public class Leave { public Guid Id { get; set; } public string Title { get; set; } public string Description { get; set; } public DateTime AppliedAt { get; set; } public bool Approved { get; set; } public override string ToString() { return string.Format("title:{0}, description:{1}", Title, Description); } }
引入对象。
public class Leave { public Guid Id { get; set; } public string Title { get; set; } public string Description { get; set; } public DateTime AppliedAt { get; set; } public bool Approved { get; set; } public override string ToString() { return string.Format("title:{0}, description:{1}", Title, Description); } } public enum Gender { M, F } public class Employee { public string FirstName { get; set; } public string LastName { get; set; } public Gender Gender { get; set; } public DateTime JoinedAt { get; set; } // ... public bool ApplyLeave(Leave leave) { ... } public IEnumerable<Leave> GetMyLeaves() { } } public class Manager : Employee { public bool ApproveLeave(Leave leave) { ... } public bool RejectLeave(Leave leave) { ... } }
首先以上代码创建了若干类,
leave:请假对象
employee:员工对象
manager:经理对象
其次做了方法提取。把management类中的方法分配在了不同的对象中。这样就完成了重构的第一步,也是我们开始使用OO力量的开始。
在接下来的文章中,需求会稍微有些变化,会介绍如何使用不同的面向对象技巧来应对变化,适应变化。
相关文章推荐
- java8实战七:使用Lambda重构面向对象的设计模式
- [阅读笔记]面向对象的设计法则--法则1:优先使用(对象)组合,而非(类)继承 Favor Composition Over Inheritance
- 使用Hibernate做一对多的实体映射(使用面向对象的方式设计表)
- 关于面向对象的的设计原则的使用
- 据了解,目前学生使用LabVIEW设计程式的比例已高
- 软件设计过程中面向对象UML技术如何使用
- 一些面向对象的设计法则-法则1:优先使用(对象)组合,而非(类)继承
- 网站重构——轻量化的网站架构设计一,使用nodejs sqlite3查询数据
- 黑马程序员_Java基础_面向对象(Static的使用、对象初始化和调用成员过程、单例设计模式)
- 面向对象、原则、设计模式、重构之间关系的经典诠释
- 如何使用C语言实现面向对象的设计
- 设计中的微创手术――使用重构原则消灭重复代码
- 重构之美之一改造面向过程式设计(转)
- 在重构的过程中,什么情况下应该使用设计模式?应该用哪种模式?
- Windows程式开发设计指南(十三)使用印表机
- 使用Rundll32.exe和Rundll.exe(转程式设计技术)
- 从Java的角度理解设计模式2:自动化重构工具的使用
- 面向对象的设计方式处理Android编程中的GridView问题,以及自定义ListAdapter的使用
- 网站重构——轻量化的网站架构设计一,使用nodejs sqlite3查询数据
- 关于面向对象的的设计原则的使用