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的主要用途就是软件设计!也有人认为,如果你不是开发人员,是难以理 ...
随机推荐
- 利用JAVA生成二维码
本文章整理于慕课网的学习视频<JAVA生成二维码>,如果想看视频内容请移步慕课网. 维基百科上对于二维码的解释. 二维条码是指在一维条码的基础上扩展出另一维具有可读性的条码,使用黑白矩形图 ...
- 仿google art图片预览算法及demo(web版本)
演示地址: http://codeman35.itongyin.com:19001/v3/preview.html 功能支持:拖动 滚轴放大缩小 按钮放大缩小 鹰眼预览 鹰眼拖动等功能
- 答:SQLServer DBA 三十问之三:有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理
3. 有哪些操作会使用到TempDB:如果TempDB异常变大,可能的原因是什么,该如何处理: tempdb的用途:1)存储专用和全局临时变量,不考虑数据库上下文: 2)与Order by 子句,游标 ...
- isMemberOfClass和isKindOfClass的区别
1.isMemberOfClass:作用:用于判断一个对象是否属于当前这个类 Person *rose = [[Person alloc] init]; if ([rose is ...
- SQL 字符串处理大全
select语句中只能使用sql函数对字段进行操作(链接sql server),select 字段1 from 表1 where 字段1.IndexOf("云")=1;这条语句不对 ...
- Linux Shell ---系统命令(1)
date命令 功能说明:显示或设置系统时间与日期. 语 法: date [-d <字符串>][-u][+%H%I%K%l%M%P%r%s%S%T%X%Z%a%A%b%B%c%d%D%j%m ...
- Java程序员必须知道的10个调试技巧
调试可以帮助识别和解决应用程序缺陷,在本文中,将使用大家常用的的开发工具Eclipse来调试Java应用程序. 但这里介绍的调试方法基本都是通用的,也适用于NetBeans IDE,我们会把重点放在运 ...
- python学习心得第一章
初始python 1什么是程序 计算机程序是一组执行某种动作的的指令.和那些电路.芯片.显卡.硬盘等不同,它不是计算机本身可以触摸的部分,而是隐藏在背后运行在硬件上面的东西.程序就是一系列告诉没有知觉 ...
- linux 学习 13 系统管理
第十三讲 Linux系统管理 13.1.1进程管理-进程查看 13.1.2进程管理-终止进程 .2工作管理 .3系统资源查看 .4系统定时任务 13.1.1进程管理-进程查看 .进程简介 进程是正在 ...
- VC++ CArchive及简单的文件操作方法
CArchive 方法用于存取文件 我向你推荐的是使用CArchive,它的使用方法简单且功能十分强大.首先还是用CFile声明一个对象,然后用这个对象的指针做参数声明一个CArchive对象,你就可 ...