在c++里,要使一个类成为一个抽象类,可以在其定义一个纯虚函数。抽象类也可称作接口。
一
统一建模语言UML是OMG(Object Management Group)在1997年发表的图标式软件设计语言,它综合了很多种当时已经存在的面向对象的建模语言、方法和过程。
对一个软件系统而言,UML语言具有以下的重要功能:可视化功能,说明功能,建造功能和建文档功能。
1) 可视化功能:可视化可以促进对问题的理解和解决,并且方便熟悉UML的设计师彼此交流和沟通。
可以较容易地发现设计草图中可能的逻辑错误,保证最后完成的软件确实能按照要求运行,避免和减少意外发生。
2)说明功能:对一个系统的说明应当通过一种通用的、精确地、没有歧义的通信机制进行,显然UML的特性使得UML很适合于这种说明工作。
系统的整体设计可以指导软件的开发过程。由于重要的决定均可以在开始写代码之前就做出,因此可以减少低质量的代码,进一步降低开发成本。
3)建造功能:UML有它自己的语法规则,这使得人们可以使用建模工具软件对一个系统设计模型加以解释,并将设计模型映射到一种计算机语言上。
也就是说,使用一种建模工具可以大大加快建模和系统设计的过程。通过UML可以看到总体的图像,这样一来,可以均衡调配系统所消耗的计算机的资源
,使系统更有效率。因为系统的设计首先完成,所以很容易就能发现可以复用的代码。代码能够高效率地实现复用,可以降低开发成本。
4)建文档功能:使用UML进行设计可以同时产生系统设计文档。
由于使用UML设计的软件写出代码之前就有专业化的设计和文档资料,所以程序员事先精确地知道他们的计划是什么。当需要修改一个已有的系统时,如果能找到那个
系统的UML文档资料,则会节省学习时间,使修改工作事半功倍。 这样可以降低维修成本。
如果在项目进行过程当中,有新的程序员参加项目的话,这些程序员可以借助UML图形资料很快熟悉开发中的系统。
二
UML包括以下的图:
- 使用案例图
- 类图
- 序列图
- 合作图
- 状态图
- 活动图
- 构件图
- 部署图
在所有的这些图里面,案例图、类图和序列图是最为有用的。
摘自《java设计与模式》一书。。
更多UML内容可以参考http://www.uml.org.cn/oobject/OObject.asp,http://developer.51cto.com/art/201006/204549.htm
在类与类之间,会有连线指明它们之间的关系。
类和类,类和接口,接口和接口之间可以建立以下几种关系:
一般化关系、关联关系、聚合关系、合成关系和依赖关系,这几种关系都是静态的。
1)一般化关系:表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
一般化的关系是从子类指向父类,或从实现接口的类指向被实现的接口,与继承或实现的方向相反。
一般化关系在Java语言中可以直接翻译为关键字extends和implements。前者描述类与类之间、接口与接口之间的一般化关系,后者描述与接口之间的一般化关系。
2)关联关系:是类与类之间的连接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以使单向的。双向的关联可以有两个箭头或者没有箭头。
单向的关联有一个箭头,表示关联的方向。单向的关联更为普遍,通常不鼓励双向的关联。
3)聚合关系:聚合关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类和引擎类、轮胎类、以及其他的零件类之间的关系便是
整个和个体的关系
4)合成关系:是关联关系的一种,是一种比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期,合成关系是不能共享的。
代表整体的对象需要负责保持部分对象的存活,在一些情况下负责将代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责
此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生合成关系,由后者排他地负责生命周期。
5)依赖关系:也是类与类之间的连接,依赖总是单向的。依赖关系表示一个类依赖另一个类的定义。
摘自《Java设计与模式》一书。。。
将const用于指针有一些微妙的地方。我们来详细探讨一下吧。顺便补习c/c++知识。之前在项目中,做的学习笔记不小心被误删了,痛苦Ing,看来做好数据备份还是每天必须要做好滴。
好的,言归正传。
在初学c++之时,经常会弄混淆const和指针的含义。
先看个例子吧,
int age = 39;
const int * pt = &age;
该声明指出,pt指出一个const int(这里为39),因此不能使用pt来修改为这个值。换句话说,*pt的值为const,不能被修改:
*pt +=1 ; //非法
cin >> *pt ; //非法
现在看一个微妙的问题。pt的声明并不意味着它指向的值实际上就是一个常量,而只是意味着对pt而言,这个值是常量。例如,pt指向age,而age不是const。可以直接通过age变量来修改age的值,但不能使用pt指针来修改它.
在看第二例子,
int sloth = 3;
const int * ps = &sloth ;
int * const finger = &sloth;
最后一个声明中,关键字const的位置与以前不同。这种声明格式使得finger只能指向sloth,但允许使用finger来修改sloth的值。中间的声明不允许使用ps来修改sloth的值,但允许将ps指向另一个位置。
简而言之,finger和*ps都是const,而*finger和ps不是。
总结:
尽可能使用const
1.这样可以避免由于无意间修改数据而导致的编程错误。
2.使用const使得函数能够处理const和非const实参,否则将只能接受非const数据。
摘自与c++primer plus第五版。。。。。
都说好记性不如烂笔头,可惜现在家里连只笔都没找到,可悲,明天赶紧弄上,重新复习学习数据结构和算法。以后也尽量抽时间写写自己的学习笔记和心得。
很久没写code了 回头看看以前写的code, 变味了...
花了写时间去整理一下自己的学习之路,其中有位朋友介绍了篇文章,
感触极大,像一盏灯,驱走了所有的迷雾,路就在脚下,
而我要做的就是给自己选择一条路,一直走下去,至少是五年,坚持着.....
从开始学习c语言时,或许根本花心思去认真的思考过,左边进,右边出。所以到最后期末实训的时候,都是抄袭别人的,唉 ,就这样过去了半年的时光。
大一的那一年都是在体会大学的生活,
吃喝玩乐,参加各种有意义的,
无趣的活动,回宿舍就打游戏,
不再宿舍的时候就是在足球场,晚上就是和那些老乡们一起喝酒,很多时候都是被人家抬回来的....
不过那学期开始接触c#了,
有了个不错的老师教,开始学着拉拉几个控件,
写写几个事件,感觉就是那个爽啊...突然觉得编程也不难嘛 ... 呵呵......
后来,要做个宿舍管理系统的实训,很困难,不知从何下手,弄了下界面,写了几个时间,
连接上数据库,在list出来,貌似就基本完成了,没啥业务逻辑,除了基本的判断,就没在多写if语句,也就这样蒙混过去了。
上大二了,换了宿舍,新的环境,好像闲了一段时间,又开始打游戏,踢球,换了新老师,开始学习asp.net,ado.net,framework,不过还是学的一塌糊涂,可能是没用心吧,
好像是一直都没用心。在此期间,去图书馆借了书,知道三层架构,MVC.....,又到实训的时候,自己基本上写了全部代码,不过界面弄的好难看,好像是那时才对编程有点了解,
模模糊糊的看到了.net轮廓.
2月开学的时候,学校开始交jsp,没Java基础也学,发了几本书,有一本叫android的,突然想起刚上大学的时候,表哥和我说的也是android开发,那一年是2009年10月,那时android才刚刚兴起,并没有像这样的火,我的表哥就叫我开始学习android,说有前途,没办法,还是当作耳边风,是不是很笨啊.
于是上网了解一下,那不是一般的热门,到处都是论坛,资料.嗯嗯 ,找到了一条绳子,下了很多资料,mars的视频,神马的一大堆,看视频,写代码,过了半个月,感觉是不舒服啊,遇到了很多问题,很多代码不知其意,于是进群,找人解决,高兴的是,碰到了一个不错的朋友,有问题的时候就叫他帮我远程解决,听他说了一些的学习的方法,发现要有Java基础,嗯嗯,那就开始学吧,找了本经典的书Java编程思想,看啊看,写又写,没坚持下来,看了十章吧,生病了,大病,休息了半个月,啥都没看,课也没上,没精神,每天就是看电影,睡觉打发时间.
病好以后,就重新开始在学Java,这次收获的挺大,对Java有了个基本的了解,了解开源....................
又开始重写写android的代码了,照着书,能够基本其大意了,觉得的还不错的时候,又小病了一下,身体不行啊,要好好锻炼了,因为这学期基本上没去运动了,那天是因为疲劳过度,又吃错了东西,喉咙严重发炎,(我们去春游了,吃烧烤)伤心啊,又痛苦了几天,到现在基本好了.
在一个大病和小病期间,经历了很多事,重新换了个宿舍,因为很以前的一个宿舍的同学不知道是谁的错,突然发现就没讲话了,
又是同班,每天住在一起,是在难受的很,刚开始觉得以后应该可以解决这个矛盾的,没想到到后来,他似乎是越看我越不顺眼,
没办法,就算是我的错吧,我不对,我无知,我搬出去了,给了自己一个新的生活环境,给自己重新定下了目标,有天和朋友聊天
他和我说了现在的互联网的发展方向,给我介绍了一个人的文章,是Javaeye的创始人之一吧,看了很多,改进自己以前的许多思维,
重新认识了编程.
去图书馆借了好多书,了解真正的计算机,这几本书我会直接去买的,tcp/ip的网际互联,Linux设备驱动程序,Java编程思想,重构 改善既有的代码,算法导论,好好阅读,品读世界级的大师的文章,真正去了解计算机。
想了很多,也明白了许多,我想说这应该是我真正踏上程序员之路,当然我有也信心,有了理想,努力的付出,定能收获丰硕的果实。
新的起点,新的开始。
