UML类与类的关系, 总算理解了关联和依赖在实际中的区别
摘要:类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下。类与类之间存在以下关系: (1)泛化(Generalization) (2)关联(Association) (3)依赖(Dependency) (4)聚合(Aggregation)UML图与应用代码例子:1.泛化(Generalization)[泛化]表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。[具体表现]父类 父类实例=new 子类()[UML图](图1.1)图1.1 Animal类与Tige...
阅读全文
posted @
2012-09-21 18:58
bitbit
阅读(311)
推荐(0) 编辑
目标:软件架构师和系统分析师
摘要:软件构架师是技术主管首先,软件构架师是技术主管,这意味着除了他要有技术上的技能外,还要有很好的领导才能。构架师的领导能力在团队中和项目质量控制中起着十分重要的作用。在团队中,构架师是项目的技术总管,他需要有丰富的知识背景,以便作出技术上的决定。相对于构架师来说,项目经理是来管理项目的资源,时间进度和花费的。使用电影制作来做类比的话,项目经理就是制片人(他要确定工作被完成了),而构架师是导演(他需要确定工作被正确的完成)。由于他们在项目中所处的位置,构架师和项目经理是公众人物,在一个团队中,他们是整个项目所涉及的所有人员的联系枢纽。构架师应该为建立软件构架争取投资,并且要明确建立软件构架能给组织
阅读全文
posted @
2012-09-20 20:36
bitbit
阅读(424)
推荐(0) 编辑
设计模式与软件架构设计
摘要:设计模式与软件架构设计 一、面向对象软件架构设计思想 a)面向对象范式 i.面向对象范式的核心是“对象”的概念 ii.所有的东西都聚焦于对象 iii.围绕对象-而非函数-组织代码 b)对象从不同视角观察 i.概念层:一个对象是一系列责任 ii.规格层:一个对象是一系列可以被其他对象或该对象自己调用的方法 iii.实现层:一个对象是一些代码和数据 c)设计原则 i.“开闭”原则(OCP) ii.里氏代换原则(LSP) iii.依赖倒转原则(DIP) iv.接口隔离原则(ISP) v.组合/聚合复用原则(CARP) vi.迪米特法则(LoD) 二、使用UML进行软件架构设计 a)最小UML建模技术
阅读全文
posted @
2012-09-20 19:46
bitbit
阅读(715)
推荐(0) 编辑
深入理解迭代二维开发模型的6个核心过程工作流和3个核心支持工作流。
摘要:RUP的二维开发模型 在RUP中,软件开发生命周期根据时间和RUP的核心工作流划分为二维空间:横轴表示项目的时间维,是过程展开的生命周期特征,体现开发过程的动态结构。RUP的核心工作流 RUP中有9个核心工作流,分为6个核心过程工作流(Core Process Workflows)和3个核心支持工作流(Core Supporting Workflows)。RUP的四个阶段 通过使用RUP,软件产品的生命周期被分成单独的开发周期。这些开发周期再被细分为多个阶段。RUP包括以下几个阶段:初始阶段;细化阶段;构造阶段;发布发布阶段。RUP的迭代开发模型 RUP中的每个阶段可以进一步分解为迭代...
阅读全文
posted @
2012-09-19 16:40
bitbit
阅读(3902)
推荐(0) 编辑
系统架构设计师和系统分析师的区别与联系
摘要:区别: 系统分析师比系统架构师更贴近用户一点,主要是需求分析,业务分析。系统架构师比系统分析师更贴近技术一点,是技术专家、资深技术人员。联系: 都是高级抽象级别,同作为软件高级职称资格,是程序员和软件设计师的领导者和技术顾问。 两个联系多于区别,一般系统分析师组和架构师组合作,共同制定一个基础技术框架。
阅读全文
posted @
2012-09-19 14:11
bitbit
阅读(2514)
推荐(0) 编辑
在分析时 画出正确的用例图是非常重要的。
摘要:要画出用例图,必须首先确定系统的参与者有哪些。参与者又分为普通用户,系统用户,以及外部系统。每个用例描述了系统的一个相对独立的模块,但他并不涉及系统内部的具体实现细节。用例之间的关系有泛化,包含,扩展三种。
阅读全文
posted @
2012-09-18 20:17
bitbit
阅读(270)
推荐(0) 编辑
uml中,依赖 和 关联 有什么区别吗?
摘要:1.A dependency exists between two elements if changes to the definition of one element (the supplier) may cause changes to the other (the client). With classes, dependencies exist for various reasons: One class sends a message to another; one class has another as part of its data; one class mentions
阅读全文
posted @
2012-09-15 14:00
bitbit
阅读(424)
推荐(0) 编辑
UML关系(泛化,实现,依赖,关联(聚合,组合))
摘要:UML关系(泛化,实现,依赖,关联(聚合,组合))UML的构造快包含3种:(1) 事物(4种):结构事物,行为事物,分组事物,注释事物(2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系(3) 图(10种):用例图,类图,对象图,包图,组件图,部署图,状态图,活动图,序列图,协作图事物是对模型中最具代表性的成分的抽象;关系把事物结合在一起;图聚集了相关的事物。(2) 关系(4种)UML中类与类,类与接口,接口与接口这间的关系有:泛化(generalization)关系,关联(association)关系(关联,聚合,合成),依赖(dependency)关系,实现(realization
阅读全文
posted @
2012-09-15 12:30
bitbit
阅读(231)
推荐(0) 编辑
类的设计原则
摘要:1.在设计一个类时,可能会不自觉地与它的实现相联系(譬如,这个接口我这样设计,功能是否能最终实现?).这是一个很基本的错误. 设计时要把抽象与实现分离。理由很简单,一是简化了类的抽象,忽略对当前设计目的来说不重要的属性或特性,如飞机驾驶培训系统的飞机类,就可以忽略飞机的客舱内部布置;二是把抽象与实现分现,将使抽象的实现更灵活。如飞机的起降控制,只需提供两个接口,具体起飞控制流程和降落控制流程并不需要涉及。又如,酒店预订系统的房间类,可以不考虑房间的装修时间,室内陈设的新旧程度,提供退房接口,也不关心退房的具体流程。2.接口要最小化.通常,一个完美的类应该包含下面这些成员1~6。但是这不是所有类
阅读全文
posted @
2012-09-12 21:09
bitbit
阅读(548)
推荐(0) 编辑
哈希表
摘要:哈希表散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。目录基本概念常用的构造散列函数的方法处理冲突的方法查找的性能分析实际应用字符串哈希函数基本概念 * 若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。 * 对不同的关键字可能得到同一散列地址,即key1≠key2,而f(k..
阅读全文
posted @
2012-09-12 14:12
bitbit
阅读(524)
推荐(0) 编辑
为什么需要auto_ptr_ref
摘要:为什么需要auto_ptr_ref这几天开始拜读侯捷先生和孟岩先生的译作《C++标准程序库:自修教程与参考手册》 。两位先生确实译功上乘,读得很顺。但是读到P55页关于auto_ptr_ref的讨论,却百思不得其解:为什么需要引入auto_ptr_ref这个辅助类呢?从书中描述来看,仿佛与拷贝构造函数 、右值 、类型转换 有关。于是,结合auto_ptr的源代码,google之、baidu之,找了一推资料,终于初步 搞清该问题。auto_ptr的拥有权C++常见的智能指针有std::auto_ptr、boost::shared_ptr、boost::scoped_ptr、boost::shar
阅读全文
posted @
2012-09-12 14:00
bitbit
阅读(924)
推荐(0) 编辑
*********** 复习算法复杂度,基础 ************
摘要:算法复杂度目录简介1、时间复杂度2、空间复杂度编辑本段简介 同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。1、时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)...
阅读全文
posted @
2012-09-11 19:42
bitbit
阅读(340)
推荐(0) 编辑
根据二叉树的后序遍历以及中序遍历还原二叉树
摘要:根据二叉树的后序遍历以及中序遍历还原二叉树【题目】假设一棵二叉树的后序遍历序列为 DGJHEBIFCA ,中序遍历序列为 DBGEHJACIF ,则其前序遍历序列为 ( ) 。A. ABCDEFGHIJB. ABDEGHJCFIC. ABDEGHJFICD. ABDEGJHCFI由题,后序遍历的最后一个值为A,说明本二叉树以节点A为根节点(当然,答案中第一个节点都是A,也证明了这一点)下面给出整个分析过程【第一步】由后序遍历的最后一个节点可知本树根节点为【A】加上中序遍历的结果,得知以【A】为根节点时,中序遍历结果被【A】分为两部分【DBGEHJ】【A】【CIF】于是作出第一幅图如下【第二步】
阅读全文
posted @
2012-09-09 14:51
bitbit
阅读(602)
推荐(0) 编辑
CRT运行时库
摘要:CRT运行时库1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制,数据类型等);所以,C 语言内核开发出来之后,Dennis Ritchie 和 Brian Kernighan 就用 C 本身重写了 90% 以上的 UNIX 系统函数,并且把其中最常用的部分独立出来,形成头文件和对应的 LIBRARY,C run-time library 就是这样形成的。3)随后,随着 C 语言的流行,各个 C 编译器的生产商
阅读全文
posted @
2012-09-09 14:49
bitbit
阅读(1016)
推荐(0) 编辑
私有继承于Noncopyable,屏蔽默认拷贝构造与默认复制构造
摘要:classNoncopyable{protected:Noncopyable(){};~Noncopyable(){};private:Noncopyable(constNoncopyable&src);constNoncopyable&operator=(constNoncopyable&src);//声明一下就行了};为了禁用编译器自动提供的功能,你必须将相关的成员函数声明为 private 的,同时不要实现它。这里使用一个像 noncopyable 这样的类来完成这一工作。
阅读全文
posted @
2012-09-09 14:45
bitbit
阅读(325)
推荐(0) 编辑
软件系统设计思路
摘要:软件系统设计思路 最近有学弟问我,拿到一个软件需求,但是却不知道怎么才能更好地架构好整个系统,在此,我简单地根据我的经验介绍一下我是怎么设计一个软件系统的吧。当然,这只是我的一个简单的思路而已,真正涉及到一个大的软件项目,可能还要复杂很多很多。 要设计一个面向对象的系统,建议遵循如下思路:1. 调研,完成一份详细的需求文档 (1)系统要实现什么功能 (2)性能上有什么特别的要求 (3)哪些是技术难点,可以的话对技术难点首先测试攻关2. 确定系统的运行环境 (1)系统运行的操作系统:widows,linux,unix等 (2)使用何种编程语言:c/c++,java,C# 等 (3)使用何种界..
阅读全文
posted @
2012-09-09 14:40
bitbit
阅读(1543)
推荐(0) 编辑
类设计五项基本原则
摘要:类设计五项基本原则原则:单一职责原则开放封闭原则Liskov替换原则依赖倒置原则接口隔离原则第8章 单一职责原则 ( SRP )就一个类而言.应该仅有一个引起它变化的原因. 一个class就其整体应该只提供单一的服务 如果一个class提供多样的服务,那么就应该把它拆分,反之,如果一个在概念上单一的功能却由几个class负责,这几个class应该合并 第9章 开放-封闭原则 ( OCP )软件实体(类. 模块. 函数等等)应该是可以扩展的. 但是不可修改的.例如.把一个类的功能抽象出来.形成一个抽象接口.然后对该接口编程.这样当需要扩展时只要从该接口派生一个新类就可以完成扩展的功能.看一个例.
阅读全文
posted @
2012-09-09 14:34
bitbit
阅读(980)
推荐(0) 编辑
C++虚函数表解析
摘要:C++虚函数表解析 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段
阅读全文
posted @
2012-09-09 13:58
bitbit
阅读(197)
推荐(0) 编辑
C++多态性(静多态和动多态)
摘要:C++多态性C++中的多态(虽然多态不是C++所特有的,但是C++中的多态确实是很特殊的)分为静多态和动多态(也就是静态绑定和动态绑定两种现象),静动的区别主要在于这种绑定发生在编译期还是运行期,发生在编译期的是静态绑定,也就是静多态;发生在运行期的则是动态绑定,也就是动多态。静多态可以通过模板和函数重载来实现(之所说C++中的多态主要还是因为模板这个东西),下面举两个例子:1)函数模板template <typename T>T max(const T& lsh, const T& rhs) { return (lsh > rhs) ? lsh : rhs;
阅读全文
posted @
2012-09-09 13:54
bitbit
阅读(1328)
推荐(1) 编辑
再论 重载、覆盖、多态与函数隐藏
摘要:重载、覆盖、多态与函数隐藏 经常看到C++的一些初学者对于重载、覆盖、多态与函数隐藏的模糊理解。在这里写一点自己的见解,希望能够C++初学者解惑。 要弄清楚重载、覆盖、多态与函数隐藏之间的复杂且微妙关系之前,我们首先要来回顾一下重载覆盖等基本概念。 首先,我们来看一个非常简单的例子,理解一下什么叫函数隐藏hide。 #include <iostream> using namespace std; class Base{ public: void fun() { cout << "Base::fun()" << endl; } }; cla
阅读全文
posted @
2012-09-09 13:51
bitbit
阅读(384)
推荐(0) 编辑
图文例解C++类的多重继承与虚拟继承
摘要:图文例解C++类的多重继承与虚拟继承图文例解C++类的多重继承与虚拟继承文章导读:C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。 在过去的学习中,我们始终接触的单个类的继承,但是在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。 举个例子,交通工具类可以派生出汽车和船连个子类,但拥有汽车和船共同特性水陆两用汽车就必须继承来自汽车类与船类的共同属性。 由此我们不难想出如下的图例与代码: 当一个派生类要使用多重继承的时候,必须在派生类名和冒号之后...
阅读全文
posted @
2012-09-09 13:50
bitbit
阅读(214)
推荐(0) 编辑
CC++定位崩溃代码行的方法
摘要:如何根据异常提示信息找出程序出错代码LINUX 编程 2010-06-23 22:44:10 阅读136 评论0 字号:大中小订阅看到网上说在debug下可以找到预料的崩溃地址行,但是实际上没有什么用呀。(既然在debug下,那直接用调试器找不更好吗? 费这么大劲干什么)(转的文章在后面)Release版本(指编译器优化后的),要找崩溃地址行就比较费劲了。linux下的方法:1、使之生成core dump文件2、gdb调试该core文件3、根据大概的堆栈信息,运行disassemble (具体用法见gdb帮助)4、根据崩溃地址找到对应的崩溃反汇编码5、分析反汇编代码,找到程序中崩溃代码。(如果
阅读全文
posted @
2012-09-09 13:49
bitbit
阅读(4134)
推荐(0) 编辑
C++函数重定义、重载、重写
摘要:C++的重写,重载,重定义1. 重写 (override):(又称覆盖) 父类与子类之间的多态性。子类重新定义父类中有相同名称和参数的虚函数。1) 被重写的函数不能是 static 的。必须是 virtual 的,或者是 override 的 ( 即函数在最原始的基类中被声明为 virtual , c++ 中没有 override) 。2) 重写函数必须有相同的类型,名称和参数列表 (即相同的函数原型)3) 重写函数的访问修饰符可以不同。尽管 virtual 是 private 的,派生类中重写改写为 public,protected 也是可以的 ( 这点与 C# 完全不同 )注:一旦子类重写
阅读全文
posted @
2012-09-09 13:47
bitbit
阅读(935)
推荐(0) 编辑
智能指针实现
摘要:下面是一个智能指针的实现,很好,可以多多采用。#ifndef SMART_PTR_H#define SMART_PTR_H//智能指针,可以加入set或map,利用其排序参数进行排序//set或map调用clear或erase会调用SmartPtr析构函数,不再被引用的数据指针会被deletetemplate <class T>class SmartPtr{ private: T* ptr; // pointer to the value 指针 long* count; // shared number of owners 计数 public: //initialize point
阅读全文
posted @
2012-09-09 13:44
bitbit
阅读(417)
推荐(0) 编辑
勤奋吧,一天一点,努力提高基本技能。
摘要:加油!!!2014完成转摘300篇。本月到100篇。
阅读全文
posted @
2012-09-05 21:02
bitbit
阅读(174)
推荐(0) 编辑