




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Version 1.1, Release 20141125第二讲课程概述程序设计 strategy pattern observe pattern template method Command通讯 UDP TCP Select/epoll CTP中的STL概述 Stl的容器 Stl的性能C+概STL述概述STL简介OOP 执行期、显式的多态STL 编译期、隐式的多态基于型别的泛型编程不同于OOP的一种抽象性质对一组抽象概念的建模各个概念之间形成自然的阶层组件都是精确符合某些特定条件而写成,组件可以相互作用、扩充泛型算法= 实际指令+ 需求条件定义抽象的Concepts,并据此书写算法和数据结
2、构,是泛型编程的本质STL概述standard template library容器Container基于类型的计算 类型参数化编译期多态 泛型化设计关注知识点 常用的容器 string iostream仿函数Function object空间配制器allocatorStl组件迭代适配器Adaptor迭代器Iterator算法AlgorithmSTL概述STL & OOP 抽象表现:OOP接口显式多态显式的接口STL接口隐式的接口隐式多态STL概述STL中常用组件ContainerIteratorIteratorAlgorithmAlgorithm 常用算法的泛型化 泛化的指针 基于层次特征C
3、ontainer 基于型别的数据 一致化的方式 友好的接口 隐藏内部实现C+概述STL中的容器原理:1 关联容器AssociativeContainer map multimap set multiset2 序列VectorList slist dequeContainerAdapters3 Adapter容器SequencesStackQueue priority_queueStl容器 连续的线性空间 一个环状双向链表 一种双向开口的连续线性空间 stack和queue是deque的子集 迭代器就是一个普通指针 迭代器是封装了list node 的指针 迭代器支持“分段,整体维护”的空间模式
4、 不遍历 map中一个键值对应一个实值,不键值上的重复,内部是按键值来进行 set中键值就是实值, 实值就是键值,而 键值是不可以更改 的 priority_queue带权值的queue,顺序入队之后,按照的大小出队。以 vector为底层容器, 这与queue相差很大。 一种数据结构,完全二叉树,但在实现上,它没有选择一般的二叉树数据结构,使用的是数组排序的Priority_queueheapSetmulti_setMapmulti_mapQueue/stackDequeListVerctorSTL容器Container 常用函数vector Push_back back pop_backo
5、perator Remove eraselist push_back pop_back back push_front front pop_front sliceset insert found count Lower|upper_bound equal_rangemap 容纳pair Insert found count lower|upper_bound equal_rangeSTL容器STL的性能建议优先使用泛型算法,代替书写优先使用容器的方法,而不是通用算法remove并不真的删除vector中的元素distance advance在不同容器的性能insert在不同容器中的性能表现依据
6、insert find的概率选择合适容器&CP&CTPNetwork常用的TCP/IP协议IP:互联网协议 主机间传输数据的层协议TCP: 传输协议 应用程序间传递数据的传输协议UDP:用户数据报协议 传输层协议,比TCP简单,也不可靠ICMP:互联网报文协议 携带错误信息Network的协议栈应用层传输层 TCP UDP层 ICMP IP数据链路层ApplicationPresentation SessionARPHardware Interface RARP物理层Network互联网协议剖析表示层传输层层链路层物理层传输线路ARPHardware InterfaceRARPICMPIPTC
7、PUDPProgramProgramProgramNetwork协议数据封装应用层应用层TCPIP用户数据用户数据用户数据用户数据应用头应用头应用头TCP头TCP头IP头Network理解端口使用UDP端口,类比于邮政信箱TCP端口,类比于系统端口是对应用程序的标识传输层利用端口对数据进行寻址NetworkCTP中的Front tkernel 之间的通讯front 客户端之间的通讯(ctpapi)FTDC协议Network如何搭建可靠UDP协议建立确认机制以系列号标记数据的唯一性采用滑动窗口批量,提高效率考虑MTU,使用合适的数据大小应用压缩技术减少传输量程序设程序计设计Pattern设计的基
8、本原则 一个类仅一个引起它变化的 软件实体扩展开发,修改封闭 子类必须能够替换掉基类 模块不依赖于底层模块,二者依赖于抽象 抽象不依赖于细节,细节应该依赖于抽象 如果类的接口不是内聚的,需要分解成多组接口原则依赖倒置原则Liskov替换原则开放-封闭原则单一职责原则Pattern常用的设计模式Command patternTemplate methodStrategy patternstate patternobserve patternSingleton PatternPatternCommand PatternClass CommandVirtual Void execute()=0;意图
9、: 对调用方法进行封装 命令对象将动作和接受对象组合在一起适用性: 事务操作 Undo/ 队列处理 日志Class LightOnCmd : public CommandLight li;Public: LightOnCmd (Light l):Li(l)Public: void execute()light.on();Class Invoker Command cmd;Active ObjectPublic:void buttonPressed()cmd.execute()MacroCommandPatternTemplate Patternclass Thread Public:Virtu
10、al init() = 0; Virtual do() = 0; Virtual clear()=0; Void run() Init();While(!done) do(); Clear();意图: 定义一个算法的骨架,而将一些步骤延子类中适用性:实现算法的不变部分,可变部分留给子类 公共行为放置到父类中,避免代码重复子类的扩展Class MyThread : public Threadvirtual int() virtual clear() virtual do()PatternStrategy PatternClass IApp virtual int() virtual clear(
11、) virtual do()class Runner Iapp *pRunner; Public:Void run() pRunner -Init(); pRunner -do(); pRunner -Clear();意图适用性Class MyApp : public IAppvirtual int() virtual clear() 用多个行为中的一个行为来配置一个类的方法 需要使用一个算法的不同变体 算法使用客户不应该知道的数据 一个类定义了多种行为,操作中以多个条件语句的形式出现 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换PatternState PatternCla
12、ss IState virtual void coin(Turastile t); virtual void pass(Turastile t);Class State1 : public Istate Class State2: public Istate意图:一个对象在其内部状态改变时改变它的行为;对象看起来似乎修改了它的类适用性:Class Turastilestatic Istate *locked; / new State1; Static Istate *unlocked; / new State2; Istate *currState = locked;void coin()cu
13、rrState-coin(this); 一个对象的行为取决于它的状态 , 并且它必须在运行时刻根据状态改变它的行为 一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态PatternObserver PatternClass Observer Virtual void update()=0;Class Subject vector Obvs;void nofity() for(auto i, Obvs) i.update(); void registerObv(Observer *obv)Obvs.push_back(obv);Class DataSource : Subject
14、 , ISource void change()nofity();Class ObvImpl : public Observer ISource src;int Mydata;ObvImpl (Isource src) void update() MyData = src.get_data();意图 定义对象间的一种一对多的依赖关系 ,当一个对象的状态发生改变时 , 所有依赖于它的对象到通知并被自动更新适用性 当一个抽象模型有两个方面 , 其中一个方面依赖于另一方面。 当对一个对象的改变需要同时改变其它对象 , 而不知道具体有多少对象有待改变 当一个对象必须通知其它对象,而它又不能假定 其它对
15、象是谁PatternSingleton PatternClass Singleton1 Static Singleton1 * inst; Class Singleton2 Private:Static singleton2 *inst; Protected: Singleton2();Public: static Singleton2 *Instance() return (inst)?inst:new Singleton2;Class Singleton3 Private:Static singleton2 *inst; Private: mutex m;Protected: Singleton2();Public: static Singleton2 *Instance() if(!inst) lock_guard g(m);return (inst)?inst:new Singleton2;适用性 当类只能有一个实例,而且客户可从
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 嘉荫县2025年四下数学期末预测试题含解析
- 新疆乌鲁木齐市沙依巴克区重点中学2025年初三5月模拟生物试题试卷含解析
- 山东省济南市中学2025年初三第二学期期中生物试题含解析
- 天津天狮学院《生物实验安全概论》2023-2024学年第二学期期末试卷
- 郑州信息科技职业学院《中国文化经典导读》2023-2024学年第二学期期末试卷
- 浙江省杭州市临安市2025届初三5月第二次月考生物试题含解析
- 电子商务三创赛
- 皮革制品的创新设计与市场竞争力提升考核试卷
- 电子商务平台的社会责任实践考核试卷
- 硬件性能监控与系统优化工具考核试卷
- 占用土地赔偿协议书
- 2025年开封大学高职单招语文2019-2024历年真题考点试卷含答案解析
- 饰品工厂知识培训课件
- 2025年衢州龙游经济开发区下属国资公司招聘笔试参考题库含答案解析
- 【北师大高二上】北京市部分学校2021-2022学年上学期高二期中英语试题分类汇编:阅读表达专题
- GB 30720-2025燃气灶具能效限定值及能效等级
- 中国时尚产业的发展趋势分析
- 养老床位建设服务方案(技术方案)
- 《学打结做毽子》教学课件
- 语文-湖南省长郡二十校联盟2025届新高考教学教研联盟高三第一次联考(长郡二十校一联)试题和答案
- 个人用电协议合同范例
评论
0/150
提交评论