OOP之C#设计及其UML(反向工程)

 

  现在总结一下C#类关键字(virtual、abstract、override、new、sealed)的使用(以C#代码体现),并再次熟悉一下OOP思想,使用UML工具EA(Enterprise Architect 7.5)建立其反向工程,生成其UML。 

  abstract声明抽象类、抽象方法:

  • 抽象方法所在类必须为抽象类;
  • 抽象类不能直接实例化,必须由其派生类实现;
  • 抽象方法不包含方法主体,必须由派生类以override方式实现此方法;

  virtual标记方法为虚方法:

  • 可在派生类中以override覆盖此方法
  • 不覆盖也可由对象调用
  • 无此标记的方法(也无其他标记),重写时需用new隐藏原方法

  abstract 与 virtual : 方法重写时都使用 override 关键字,interface中的方法和abstract方法都要求实现

  sealed关键字:

  • 当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承,类似于Java中final关键字;

  下面为具体的C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace UserNameSpace
{
/// <summary>
/// 枚举Sex
/// </summary>
public enum Sex { Male = '男', Female = '女' } /// <summary>
/// 结构体StudentParams
/// </summary>
public struct StudentParams
{
public int id;
public string name;
public Sex sex;
public string grade;
public string major;
} /// <summary>
/// 接口
/// </summary>
interface IPeople
{
string Name
{
get;
set;
}
Sex Sex
{
get;
set;
}
short Age
{
get;
set;
} void Eat();
} interface ITeacher : IPeople
{
void Teach();
} interface IStudent : IPeople
{
void Study();
} /// <summary>
/// 抽象基类
/// </summary>
abstract class People : IPeople
{
private string name;
private Sex sex;
private short age; public string Name
{
get
{
return name != null ? name : "NA";
}
set
{
if (value != "")
{
name = value;
}
}
}
public Sex Sex
{
get
{
return sex;
}
set
{
value = sex;
}
}
public short Age
{
get
{
return age > 0 ? age : (short)0;
}
set
{
if (value >= 0)
{
age = value;
}
}
} /// <summary>
/// 虚方法
/// </summary>
public virtual void Eat()
{
Console.WriteLine("People eat.");
} /// <summary>
/// 抽象方法,必须被派生类覆写,则People为抽象类
/// </summary>
public abstract void Sleep();
} class Teacher : People, ITeacher
{
/// <summary>
/// 重写基类虚方法
/// </summary>
public override void Eat()
{
Console.WriteLine("Teacher eat.");
} /// <summary>
/// 重写基类抽象方法
/// </summary>
public override void Sleep()
{
Console.WriteLine("Teacher sleep.");
} public void Teach()
{
Console.WriteLine("Teacher teach.");
}
} sealed class Master : Teacher
{
protected void Manage()
{
}
} class Student : People, IStudent
{
StudentParams param; /// <summary>
/// 重写基类虚方法
/// </summary>
public override void Eat()
{
Console.WriteLine("Student eat.");
} /// <summary>
/// 重写基类抽象方法
/// </summary>
public override void Sleep()
{
Console.WriteLine("Student sleep.");
} public void Study()
{
Console.WriteLine("Student study.");
}
} class Program
{
static void Main(string[] args)
{
Teacher teacher = new Teacher();
ITeacher itea = (ITeacher)teacher;
itea.Eat(); Student stu = new Student();
IStudent istu = (IStudent)stu;
istu.Eat(); Console.ReadKey();
}
}
}

  我根据上面的代码,利用UML工具EA反向生成了“类图”,如下所示:

  

=======================================================================
中文名:高洪臣

C#设计及其UML(反向工程)的更多相关文章

  1. 架构设计的UML图形思考

    本篇紧接着上一篇   基本OOP知识  ,介绍高焕堂老师的第二讲. 架构设计的UML图形思考.本篇最重要的是三个词语:图形.思考.UML. 架构师的作用体现主要在项目开发前期.在整个项目还没有完毕的时 ...

  2. OOP之C#设计及其UML(反向工程)

    现在总结一下C#类关键字(virtual.abstract.override.new.sealed)的使用(以C#代码体现),并再次熟悉一下OOP思想,使用UML工具EA(Enterprise Arc ...

  3. 【转】Java 项目UML反向工程转化工具

    原文链接:http://www.cnblogs.com/bakari/p/3561207.html 今天在看一个模拟器的源码,一个包里有多个类,一个类里又有多个属性和方法,如果按顺序看下来,不仅不能对 ...

  4. 软件设计之UML—UML的构成[上]

      UML是一种通用的建模语言,其表达能力相当的强,不仅可以用于软件系统的建模,而且可用于业务建模以及其它非软件系统建模.UML综合了各种面向对象方法与表示法的优点,至提出之日起就受到了广泛的重视并得 ...

  5. 面向对象分析设计-------02UML+UML各种图形及作用

    一.UML是什么?UML有什么用? 二.UML的历史 三.UML的上层结构(Superstructure) 四.UML建模工具 五.UML的图(重点) 1.用例图(use case diagram) ...

  6. 软件设计之UML—UML的构成[上]

    UML是一种通用的建模语言,其表达能力相当的强,不仅可以用于软件系统的建模,而且可用于业务建模以及其它非软件系统建模.UML综合了各种面向对象方法与表示法的优点,至提出之日起就受到了广泛的重视并得到了 ...

  7. Java 项目UML反向工程转化工具

    今天在看一个模拟器的源码,一个包里有多个类,一个类里又有多个属性和方法,如果按顺序看下来,不仅不能对整个模拟器的框架形成一个大致的认识,而且只会越看越混乱,所以,想到有没有什么工具可以将这些个类以及它 ...

  8. 【软件设计】UML类图怎么看

    前言 无论使用哪种语言,都离不开面向过程与面向对象两个流派,而类图是面向对象程序设计中至关重要的一种软件表达形式,如何看懂类图,并设计好的软件架构,是我们作为软件工程师必不可少的技能之一. 今天小黑把 ...

  9. 2017.11.8 面向对象分析与设计(UML)---UML的作用及分类

    用到的工具 startUML 一些界面操作的说明 蓝色框是用来选择形状的,特别是接口的时候 UML有什么用? `` 有很多人认为,UML的主要用途就是软件设计!也有人认为,如果你不是开发人员,是难以理 ...

随机推荐

  1. 每天进步一点点——Linux磁盘管理LVM与RAID

    转载请注明出处:http://blog.csdn.net/cywosp/article/details/38965799 1. 传统磁盘管理问题 当分区大小不够用时无法扩展其大小,仅仅能通过加入硬盘. ...

  2. POJ 3652 &amp; ZOJ 2934 &amp; HDU 2721 Persistent Bits(数学 元)

    主题链接: PKU:http://poj.org/problem?id=3652 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do? probl ...

  3. Android圆弧形ListView的实现

    本文带大家来实现ListView的圆弧形的分布排列,原理非常easy,就是依据ListView的每个Item的高度来对每个item进行偏移. 首先自己定义一个LinearLayout,这是ListVi ...

  4. ASP.NET管线与应用程序生命周期

    ASP.NET管线与应用程序生命周期 ASP.NET管线与应用程序生命周期 8.1节介绍了IIS的系统架构和HTTP请求处理的总体流程,从中可以知道每个ASP.NET网站都对应着一个Web应用程序,此 ...

  5. Jersey的RESTful简单案例demo

    REST基础概念: 在REST中的一切都被认为是一种资源. 每个资源由URI标识. 使用统一的接口.处理资源使用POST,GET,PUT,DELETE操作类似创建,读取,更新和删除(CRUD)操作. ...

  6. 在spring MVC的controller中获取ServletConfig

    在使用SmartUpload进行文件上传时,须要用到srevletConfig: 假设是在servlet中写当然是非常easy实现的: private ServletConfig config; // ...

  7. bestcoder Round#52 1001(最短路+状压dp)

    求从1点出发,走遍所有的点,然后回到1点的最小代价. 每个点可以走若干遍. 如果每个点只能走一遍,那么设dp[i][s]为走完s状态个点(s是状态压缩),现在位于i的最小花费. 然后枚举从哪个点回到原 ...

  8. Windows Phone开发(46):与Socket有个约会

    原文:Windows Phone开发(46):与Socket有个约会 不知道大家有没有"谈Socket色变"的经历?就像我一位朋友所说的,Socket这家伙啊,不得已而用之.哈,S ...

  9. python学习笔记之十:文件和素材

    这里将介绍函数和对象--文件和流,让你在程序调用期间存储数据,并且可以处理来自其他程序的数据. 一. 打开文件 1.1 open函数 open函数用来打开文件,语法如下:open(name,[.mod ...

  10. Spring 事情具体详尽的解释

    一.Spring事务管理  1. Spring事务管理机制 三个核心部分  1) PlatformTransactionManager  平台的事务管理器  commit 提交事务.rollback ...