当前位置: 首页 > news >正文

[UML]UML系列——类图class的实现关系Realization

系列文章

      [UML]UML系列——用例图Use Case

      [UML]UML系列——用例图中的各种关系(include、extend)

      [UML]UML系列——类图Class

      [UML]UML系列——类图class的关联关系(聚合、组合)

      [UML]UML系列——类图class的依赖关系

      [UML]UML系列——类图class的泛化关系

接口的概念

       接口是一组没有实现的操作的集合。接口只提供操作的声明,不提供任何相应的功能代码。具体的功能代码由使用该接口的类实现,这叫做实现关系。

       一般意义的操作:

1  public void turnUp()
2   {
3        Console.WriteLine("{0}风扇加速转动",name);
4   }

      没有实现的操作:

1  public void turnUp();

 c#中定义接口的方法      

      [可见性] interface 接口名{[返回值类型] 方法名([参数]);}

  • 接口中只能包含方法、属性、索引器和事件的声明,没有字段和构造函数。
  • 接口中的操作都被视为公有的,不需要添加可见性。
  • 接口中只能提供方法的格式声明,而不能包含方法的实现,所以接口方法的声明总是以分号结束。

接口的符号

       例如:

1 public interface turn  //开关
2     {
3         void turnUp();
4         void turnDown();
5     }

接口的实现

       接口中声明的方法的真正实现是由类来完成的,类必须实现该接口中所定义的所有方法。一个接口可以由多个类来实现,而在一个类也可以实现一个或多个接口。

1 class  类名:接口名列表
2 {
3      ……  
4 }

 

      提示:要实现接口,必须在类名后包括接口,然后提供接口的每一个成员的实现。
      注意:观察上例中接口成员和类中相应的实现的访问类型的写法,在接口成员的声明中不需要任何访问修饰符,而在类中相应接口成员实现定义中则都用public修饰符。

      接口的作用:

      1、接口制定了一组规范,实现接口的所有的类都必须遵守这套规则。

     常常遇到这样的情况,在父类内定义了一个操作,指望它的子类能够继承。但这个操作对于父类自身而言,没有必要编写任何代码,有时也实在不知道该编写什么代码。这时,我们就不去实现这个操作,接口就是这样一组操作的集合。

    程序演示:

1  public interface animal
2     {
3         void sound();
4     }
复制代码
 dog1  class dog : animal
 2     {
 3         public string name;
 4         public int legs;
 5         public dog(string x, int y)
 6         {
 7             name = x;
 8             legs = y;
 9         }
10         public void sound()
11         {
12             Console.WriteLine(name + "的叫声为:" + "汪汪");
13         }
14     }
复制代码
复制代码
 1  class cat : animal
 2     {
 3         public string name;
 4         public int legs;
 5         public cat(string x, int y)
 6         {
 7             name = x;
 8             legs = y;
 9         }
10         public void sound()
11         {
12             Console.WriteLine(name + "的叫声为:" + "喵喵");
13         }
14     }
复制代码
复制代码
 1  class chick : animal
 2     {
 3         public string name;
 4         public int legs;
 5         public chick(string x, int y)
 6         {
 7             name = x;
 8             legs = y;
 9         }
10         public void sound()
11         {
12             Console.WriteLine(name + "的叫声为:" + "咯咯达");
13         }
14     }
复制代码
复制代码
 1  class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             animal x;
 6             
 7             x = new dog("小狗", 4);
 8             x.sound();
 9 
10             x = new cat("小猫", 4);
11             x.sound();
12 
13             x = new chick("小鸡", 2);
14             x.sound();
15         }
16     }
复制代码

      从设计的角度来看,一个项目中有多个类需要去编写,由于工作量比较大,每个类可能由不同的人进行编写,比如A程序员去写Dog类,B程序员去写Cat类。这两个类本来没什么联系的,可是由于用户需要他们都实现一个关于“叫”的方法.这就要对他们进行一种约束,让他们都继承于animal接口,目的是方便统一管理,也方便调用。
     当然了,不使用接口一样可以达到目的。只不过这样的话,这种约束就不那么明显,如果这样的类还有Duck类等等,比较多的时候难免有人会漏掉这样方法,所以说还是通过接口更可靠一些,约束力更强一些。(摘自互联网)

     2、保持程序的可扩展性。(例如上面的例子中,如果有其他的动物类..)

     3、一个类可以实现多个接口。可以在同一个类中同时实现多个接口,即实现多重继承。要实现多个接口,需将这些接口用逗号分开。

      程序演示:模拟手机即可打电话又可以视频电话

1  public interface IPhone
2     {
3         void call();
4     }
1  public interface IVideo
2     {
3         void show();
4     }

      实现接口:

复制代码
 1  class visualPhone:IPhone,IVideo
 2     {
 3         private string phoneName,videoName;
 4         public visualPhone(string name1,string name2)
 5         {
 6             phoneName = name1;
 7             videoName = name2;
 8         }
 9         public void call()
10         {
11             Console.WriteLine("{0}开始通话",phoneName);
12         }
13         public void show()
14         {
15             Console.WriteLine("{0}开始视频",videoName);
16         }
17     }
复制代码

 控制台程序:

复制代码
 1  class Program
 2     {
 3         static void callShow(IPhone x,IVideo y)
 4         {
 5             x.call();
 6             y.show();
 7         }
 8 
 9         static void Main(string[] args)
10         {
11             IPhone m = new visualPhone("步步高", "");
12             IVideo n = new visualPhone("", "西门子");
13             callShow(m, n);
14         }
15 }
复制代码

 对应的类图:

接口的特点

      接口中只能包含方法、属性、索引器和事件的声明,没有字段和构造函数和析构函数、不能直接被实例化。接口不能自己实现其操作,而是由相应的类来实现。一个类可以实现多个接口。

对象图(Object Diagram)

                                                              对象是类的实例,对象图也可看作是类图的实例。

对象图与类图的关系

        对象图实质上是类图的实例,主要用于了解系统在某个特定时刻的具体情况,以求发现类图中的错误,进而修正类图。

对象的符号

     与类的图形相似,但有如下区别:

     1、对象只有名称和属性两个分栏,没有操作分栏。

     2、对象的名称要加下划线

     3、对象的属性应有具体的值。(例如上面的对象图)

对象名的三种格式

对象图的组成

                                                             提示:对象图没有多重性,因为所有的链都是一对一的。

总结

     关于类图的相关到这里已经算是结束了,下面将总结包图.....

博客地址:http://www.cnblogs.com/wolf-sun/
博客版权:本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。

转载:http://www.cnblogs.com/wolf-sun/p/3426529.html

相关文章:

  • iOS不得姐项目--pop框架的初次使用
  • Mysql主主同步-配置数据同步
  • php字符串类型讲解
  • IOS照片颠倒分析及移动/页面端的处理策略和思路
  • 熊猫热土-环汶川50公里越野赛赛记
  • HDFS学习之FileSystem
  • DDD实践问题之 - 关于论坛的帖子回复统计信息的更新的思考
  • HDU1230 火星A+B【进制】
  • tomcat下server.xml配置详解
  • BZOJ 2599 Race(树分治)
  • BI报表帮你轻松自如完成数据分析、业务数据探查
  • 第二次冲刺第二天
  • LintCode_389 判断数独是否合法
  • Android开发常见错误及技巧
  • 使用Markdown写文档
  • 2017-08-04 前端日报
  • 4. 路由到控制器 - Laravel从零开始教程
  • Angular 2 DI - IoC DI - 1
  • extjs4学习之配置
  • go append函数以及写入
  • HTTP中的ETag在移动客户端的应用
  • IndexedDB
  • JS+CSS实现数字滚动
  • js对象的深浅拷贝
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Meteor的表单提交:Form
  • mysql常用命令汇总
  • quasar-framework cnodejs社区
  • Redis学习笔记 - pipline(流水线、管道)
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 好的网址,关于.net 4.0 ,vs 2010
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 我有几个粽子,和一个故事
  • 一道闭包题引发的思考
  • 一份游戏开发学习路线
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (k8s中)docker netty OOM问题记录
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core中Emit的使用
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net2005怎么读string形的xml,不是xml文件。
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件