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 > ? age : (short);
}
set
{
if (value >= )
{
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反向生成了“类图”,如下所示:

OOP之C#设计及其UML(反向工程)的更多相关文章
- C#设计及其UML(反向工程)
OOP之C#设计及其UML(反向工程) 现在总结一下C#类关键字(virtual.abstract.override.new.sealed)的使用(以C#代码体现),并再次熟悉一下OOP思想,使用 ...
- 架构设计的UML图形思考
本篇紧接着上一篇 基本OOP知识 ,介绍高焕堂老师的第二讲. 架构设计的UML图形思考.本篇最重要的是三个词语:图形.思考.UML. 架构师的作用体现主要在项目开发前期.在整个项目还没有完毕的时 ...
- 【转】Java 项目UML反向工程转化工具
原文链接:http://www.cnblogs.com/bakari/p/3561207.html 今天在看一个模拟器的源码,一个包里有多个类,一个类里又有多个属性和方法,如果按顺序看下来,不仅不能对 ...
- 软件设计之UML—UML的构成[上]
UML是一种通用的建模语言,其表达能力相当的强,不仅可以用于软件系统的建模,而且可用于业务建模以及其它非软件系统建模.UML综合了各种面向对象方法与表示法的优点,至提出之日起就受到了广泛的重视并得 ...
- 面向对象分析设计-------02UML+UML各种图形及作用
一.UML是什么?UML有什么用? 二.UML的历史 三.UML的上层结构(Superstructure) 四.UML建模工具 五.UML的图(重点) 1.用例图(use case diagram) ...
- 软件设计之UML—UML的构成[上]
UML是一种通用的建模语言,其表达能力相当的强,不仅可以用于软件系统的建模,而且可用于业务建模以及其它非软件系统建模.UML综合了各种面向对象方法与表示法的优点,至提出之日起就受到了广泛的重视并得到了 ...
- Java 项目UML反向工程转化工具
今天在看一个模拟器的源码,一个包里有多个类,一个类里又有多个属性和方法,如果按顺序看下来,不仅不能对整个模拟器的框架形成一个大致的认识,而且只会越看越混乱,所以,想到有没有什么工具可以将这些个类以及它 ...
- 【软件设计】UML类图怎么看
前言 无论使用哪种语言,都离不开面向过程与面向对象两个流派,而类图是面向对象程序设计中至关重要的一种软件表达形式,如何看懂类图,并设计好的软件架构,是我们作为软件工程师必不可少的技能之一. 今天小黑把 ...
- 2017.11.8 面向对象分析与设计(UML)---UML的作用及分类
用到的工具 startUML 一些界面操作的说明 蓝色框是用来选择形状的,特别是接口的时候 UML有什么用? `` 有很多人认为,UML的主要用途就是软件设计!也有人认为,如果你不是开发人员,是难以理 ...
随机推荐
- MongoDB(五)mongo语法和mysql语法对比学习
我们总是在对比中看到自己的优点和缺点,对于mongodb来说也是一样,对比学习让我们尽快的掌握关于mongodb的基础知识. mongodb与MySQL命令对比 关系型数据库一般是由数据库(datab ...
- windows下git识别大小写配置
默认情况下windows上的Git客户端,在文件名仅发生大小写改变时不会识别,提交后发现,gitlab上的文件名不会发生变化. 解决方法: 编辑 .git 中的config文件, 将 ignoreca ...
- js错误:TypeError $(...) is null
转载自:http://www.phpernote.com/jquery/851.html:
- 安装Nexus
- nginx performance monitor
nginx performance monitor Nginx中的stub_status模块主要用于查看Nginx的一些状态信息 示例 Active connections: 2 server acc ...
- vim 大全用法
vim中常用设置和操作: 在Linux系统下: 打开vi 文件: 0 数字0,跳转至行首 ^ 跳转至行第一个非空字符 $ 跳转至行尾 vim 括号匹配跳转操作: ctrl+] 跳转至函数或 ...
- sublime text 3 安装 pakcage control
安装sublime的pakcage control 参考: https://packagecontrol.io/installation#st3 ctrl+` import urllib ...
- 改变Eclipse 中代码字体大小
1.改变eclipse 中代码字体大小,就是我打进去的java文件的字体大小 wiondow--preferences--general--appearance--colors and fonts-- ...
- PL/SQL EO 设计与开发
1.INSERT 调用PL/SQL 去insert的时候,没有使用super(),此时应当自己创建callable statement: 调用checkErrors()方法在执行 callable s ...
- MVC NPOI Linq导出Excel通用类
之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...