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的主要用途就是软件设计!也有人认为,如果你不是开发人员,是难以理 ...
随机推荐
- idea 显示行号
File->Settings->Editor->General->Appearence->Show Line Number 选中之后"Apply",然 ...
- LCC
LCC: super vector:
- iframe跨域cookie问题
今天在项目里面遇到了iframe跨域不能写cookie的问题.应用场景是这样的:有A和B两个业务,A要通过iframe的方式嵌入B,但是在ie下A不能通过写cookie的方式记录信息,在firefox ...
- PHPCMS V9 分页类的修改教程
首先,打开 phpcms\libs\functions\global.func.php 这个文件,找到文件第622行的分页函数,复制一下,粘贴到默认分页函数的下面,重新命名后保存.(笔者在此命名为:p ...
- Activex、OLE、COM、OCX、DLL之间的区别(转)
熟悉面向对象编程和网络编程的人一定对ActiveX.OLE和COM/DCOM这些概念不会陌生,但是它们之间究竟是什么样的关系,对许多们还是比较模糊的.在具体介绍它们的关系之间,我们还是先明确组件(Co ...
- windbg学习----.process
.process 命令指定要用作进程上下文的进程(Set Process Context) .process显示当前进程的EPROCESS,这里显示当前进程为test.exe kd> .proc ...
- Mysql Innodb 间隙锁浅析
间隙锁说明 innodb引擎自动使用间隙锁来避免幻读(原因是因为innodb采用单行锁+间隙锁组合而成的行锁,会锁定一个范围和记录本身的行),参数默认innodb_locaks_unsafe_for_ ...
- CentOS6.5中配置Rabbitmq3.6.6集群方案
一.安装Erlang环境 1.下载erlang源代码 wget http://erlang.org/download/otp_src_19.1.tar.gz 2.安装依赖相关库文件 yum insta ...
- C# 根据前台校验的值,决定是否执行后台方法
<asp:Button ID="Add" runat="server" Text="加入" class="add" ...
- 通过jQuery Ajax使用FormData对象上传文件
FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". 在 Mozilla Developer 网站 使用For ...