OO基础、UML概述

一 OO基础

OO的几个基本概念:

对象

  对象是指封装了事物的状态(State)和行为(Behavior)的一个实体。可以是物理的(如一个卡车)、概念的(如一个化学过程)或软件的(如一个链表)

  状态:是对象可以处于的状况

               对象的状态随时间变化

                用属性(Attribute)和关系(Relation)表示

  行为:行为决定对象如何动作和做反应

               对象的可见行为用一系列它响应的消息来模型化

               用操作(Operation)、方法(Method)和状态机(State machine)表示

  标识(Identity):每个对象有唯一的标识

  类是对一系列具有相同属性、操作、关系和语义的对象的描述。

         对象是类的实例

            类定义了它的所有对象的结构和行为的模板

属性

   封装(Encapsulation)

   继承(Inheritance)

   多态(Polymorphism)

方法

  方法(Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO(Object-Oriented)方法

 

OO包括的三大部分:

  面向对象的分析(OOA)

  面向对象的设计(OOD)

  面向对象的编程(OOP)

二、UML概述

UML:统一建模语言(Unified Modeling Language)

UML是由Rational公司三位世界级面向对象技术专家Grady Booch,Ivar Jacobson和Jim Rumbaugh 提出的。

UML是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示。

 

什么是模型?

  模型就是真实世界的简化 ,为我们提供一个系统的原型

为什么要建模?

  为了更好的理解我们将要或正在开发的系统,因为我们通常无法理解一个复杂系统的全部。

模型能为我们做什么?

  a、帮助我们对系统进行可视化

  b、允许我们详细说明系统的结构或行为

  c、给出一个指导我们构造系统的模板

  d、对我们做出的决策进行文档化

什么是可视化建模?

  可视化建模就是用标准的图形表示法来建模。

可视化建模的作用

可视化建模获取业务流程:1、用例(use case)分析是一种从用户的角度获取业务流程的技术

                                        2、使用相同的语言,不至于产生歧义

                                        3、用例分析能让分析师在构建系统之前理解要构建什么 

可视化建模是一个交流工具

管理复杂性:1、把3000多个类放在一张图中不好

                    2、可视化建模的“包”(package)把元素模型化成有意义的组合,为不同的人提供不同级别的抽象。

                     3、软件构架

促进复用:复用是软件的“圣杯”,不止是复用代码,而是复用建立原始工件时需要的所有分析、设计、实现、测试、文档化

                 可以有一个类复用、多个类(或一个组件)的复用、应用模式等复用方式

                 可视化建模让你从复用的角度看,如果想复用工件,什么是可用的

UML的概念模型

UML建模的三个主要元素:1)、构造块:事物、关系、图

                                       2)、规则:命名、范围、可见性、完整性、执行

                                       3)、公共机制:规范说明、通用划分、扩展机制

UML元素--构造块

事物:对模型中最具有代表性的成分的抽象

(1、结构事物:通常是UML模型的静态部分,描述概念或物理元素。

         类

         接口

         用例:通常代表一个需求

         协作:表示一个用例的实现

         主动类:至少拥有一个进程或线程的类

          组件:系统中物理的、可替代的部件,如源代码文件

          节点:运行时存在的物理元素,如一个设备

    2、行为事物:是UML模型的动态部分,是模型中的动词。

           交互(interaction):可描述一个对象群体的行为或单个操作的行为

           状态机(state machine):可描述单个类或一组类之间协作的行为

    3、分组事物:是UML中的组织部分

           包(package)

    4、注释事物:是UML中的注释部分

          注解(note)

关系:把事物结合在一起

(1、依赖(dependency):一个事物发生变化会影响到另一个事物。

    2、关联(association):描述对象之间的连接。(聚合)

    3、泛化(generalization):特殊/一般关系,也就是继承。

    4、实现(realization)

图:聚集了相关的事物

(用例图(Use Case Diagram):模型化系统与外界的交互

   类图(Class Diagram):模型化系统的结构

  时序图(Sequence Diagram):模型化系统的行为

  协作图(Collaboration Diagram):模型化系统的行为

  组件图(Component Diagram):模型化组件的组织和依赖

  部署图(Deployment Diagram):模型化系统的硬件分布

  活动图(Activity Diagram):模型化系统内的事件流

  状态图(Statechart Diagram):模型化状态相关的方面

--创建用例图可以可视化应用与外界的交互

--类图表示软件的结构(包括类、关系和multiplicity)

--活动图可以表示系统内的事件流

--时序图表示如何一步步的完成系统的一个功能(时序图表示的是一个场景(scenario))

--协作图显示对象之间的交互

--状态图表示一个类的生命周期

--组件图可视化的表示组件的组织和依赖(组件:软件组件(如C++中的头文件)、运行时组件(如:DLL)、可执行的组件。

                                                            接口)

--部署图可视化的表示企业内组件的分布

 

小结:

UML是一个通用的标准建模语言,可对任何具有静态结构和动态行为的系统进行建模。

UML 适用于系统开发的不同阶段:

    需求分析阶段用用例

    分析阶段用类图

    实现阶段用动态模型

    构造阶段用OO编程语言   

    测试阶段:单元测试用类图;集成测试用组件图和协作图;系统测试用用例图

在应用标准建模语言UML时,需要有相应的开发工具来支持。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 C++ 程序,用于实现日历功能。程序可以根据用户输入的年份和月份,输出该月份的日历。 ```cpp #include<iostream> using namespace std; class Calendar { private: int year; int month; int day; int daysInMonth(); int dayOfWeek(int y, int m, int d); public: Calendar(int y, int m, int d) { year = y; month = m; day = d; } void printCalendar(); }; int Calendar::daysInMonth() { if (month == 2) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { return 29; } else { return 28; } } else if (month == 4 || month == 6 || month == 9 || month == 11) { return 30; } else { return 31; } } int Calendar::dayOfWeek(int y, int m, int d) { if (m == 1 || m == 2) { m += 12; y--; } int c = y / 100; y = y % 100; int w = (y + y / 4 + c / 4 - 2 * c + 13 * (m + 1) / 5 + d - 1) % 7; return (w + 7) % 7; } void Calendar::printCalendar() { // 打印标题 cout << "==========================" << endl; cout << " " << year << "年" << month << "月" << endl; cout << "==========================" << endl; cout << " 日 一 二 三 四 五 六" << endl; // 计算该月份的天数和第一天是星期几 int days = daysInMonth(); int firstDayOfWeek = dayOfWeek(year, month, 1); // 打印日历表格 for (int i = 0; i < firstDayOfWeek; i++) { cout << " "; } for (int i = 1; i <= days; i++) { printf("%3d", i); if ((firstDayOfWeek + i - 1) % 7 == 6) { cout << endl; } } if ((firstDayOfWeek + days - 1) % 7 != 6) { cout << endl; } } int main() { int year, month, day; cout << "请输入年份:"; cin >> year; cout << "请输入月份:"; cin >> month; day = 1; // 默认从第一天开始 Calendar calendar(year, month, day); calendar.printCalendar(); return 0; } ``` 运行程序后,用户需要输入年份和月份,程序会输出该月份的日历。例如,输入 2022 年 1 月,程序会输出下面的日历: ``` ========================== 2022年1月 ========================== 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ``` 该程序使用了一个 `Calendar` 类来实现日历功能。在这个类中,有两个私有函数 `daysInMonth` 和 `dayOfWeek`,分别用于计算指定月份的天数和该月份第一天是星期几。`printCalendar` 函数用于打印日历表格,首先打印标题,然后计算该月份的天数和第一天是星期几,最后打印日历表格。 这个程序只是一个简单的实现,可以根据需要进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值