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

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反向生成了“类图”,如下所示:

  

时间: 2024-10-13 06:29:10

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

架构设计的UML图形思考

本篇紧接着上一篇   基本OOP知识  ,介绍高焕堂老师的第二讲, 架构设计的UML图形思考.本篇最重要的是三个词语:图形.思考.UML. 架构师的作用体现主要在项目开发前期,在整个项目还没有完成的时候,架构师的心中就要有整个项目的蓝图,整体框架,为了能够将架构师自己的蓝图.思路.框架表达给其他人,就需要借助于图形的魅力,以图形来思考,以图形来表达思考的结果,表达对于产品的架构..规划.设计.在架构中,要借助自己的思维去思考未来可能的变化.为了方便团队之间的交流,如果使用相同的语言.相似的工具就

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

现在总结一下C#类关键字(virtual.abstract.override.new.sealed)的使用(以C#代码体现),并再次熟悉一下OOP思想,使用UML工具EA(Enterprise Architect 7.5)建立其反向工程,生成其UML. abstract声明抽象类.抽象方法: 抽象方法所在类必须为抽象类: 抽象类不能直接实例化,必须由其派生类实现: 抽象方法不包含方法主体,必须由派生类以override方式实现此方法: virtual标记方法为虚方法: 可在派生类中以overri

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

前言 无论使用哪种语言,都离不开面向过程与面向对象两个流派,而类图是面向对象程序设计中至关重要的一种软件表达形式,如何看懂类图,并设计好的软件架构,是我们作为软件工程师必不可少的技能之一. 今天小黑把类图学习的一些笔记和心得分享出来,供大家参考. 什么是类 了解类图之前,我们需要简单了解一下类的概念 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性.操作.关系的对象集合的总称. 在面向过程设计中,数据和算法组织成为程序.而面向对象中,数据+算法的理论基础并没有改变,虽

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

原文链接:http://www.cnblogs.com/bakari/p/3561207.html 今天在看一个模拟器的源码,一个包里有多个类,一个类里又有多个属性和方法,如果按顺序看下来,不仅不能对整个模拟器的框架形成一个大致的认识,而且只会越看越混乱,所以,想到有没有什么工具可以将这些个类以及它们之间的依赖关系转化成UML图,这样一看图就能一目了然.立刻搜了看,没想到这样的工具一大堆,下面罗列最经典的6款.参考:http://www.csdn.net/article/2012-09-12/2

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

UML是一种通用的建模语言,其表达能力相当的强,不仅可以用于软件系统的建模,而且可用于业务建模以及其它非软件系统建模.UML综合了各种面向对象方法与表示法的优点,至提出之日起就受到了广泛的重视并得到了工业界的支持. 本章将按视图.模型元素.图以及公共机制依次介绍UML的构造和基本元素,以使得读者对UML有一个总体了解,其具体细节将在后续章节中详细描述. 画图工具:eDraw.jude    欢迎大家继续支持和关注我的博客: http://hoojo.cnblogs.com http://blog

软件设计之UML—UML中的六大关系

一.UML中的六大关系 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency). 1.1. 继承关系—泛化(Generalization) 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系:在Java中用extend

Java基础__慕课网学习(25):Java第二季4.7 UML与PowerDesigner在Java设计中的应用,找了一篇比较好的博客,转载在这里

面向对象模型 面向对象模型是利用UML(统一建模语言)的图形来描述系统结构的模型,它从不同角度实现系统的工作状态.这些图形有助于用户,管理人员,系统分析人员,开发人员,测试人员和其他人员之间进行信息交流.这里主要介绍用例图,序列图和类图.   1.面向对象模型OOM 面向对象模型是利用UML的图形描述系统结构的模型,可以利用PowerDesigner的面向对象模型进行创建.PowerDesigner支持UML的下列图形. 用例图(User Case Diagram):通常用来定义系统的高层次草图

团队项目之UML图设计

团队 成员 参与 贡献比例 031602406 程晓宏(临时组长) 实体关系图设计 11 031602501 蔡宇航 实体关系图设计 8 051501124 王彬 类图设计 8 031602438 叶一帆 类图设计,泳道图设计 13 031602407 何家健 活动图设计 9 031602410 黄海潮 活动图设计 9 031602429 王锦扬 状态图设计,时序图设计 12 031602442 郑孔宇 状态图设计 10 181600215 林翔宇 用例图设计 10 031602421 林世杰

UML简介

Unified Modeling Language (UML)又称统一建模语言或标准建模语言,是始于1997年一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置. 面向对象的分析与设计(OOA&D,OOAD)方法的发展在80年代末至90年代中出现了一个高潮,UML是这个高潮的产物.它不仅统一了Booch.Rumbaugh和Jacobson的表示方法,而且对其作了进一步的发展,并最终统一为大众所接受的标准建模