编程思想汇总

C

  1. C 语言是一个静态弱类型语言,在使用变量时需要声明变量类型,但是类型间可以有隐式转换;
  2. 不同的变量类型可以用结构体(struct)组合在一起,以此来声明新的数据类型;
  3. C 语言可以用 typedef 关键字来定义类型的别名,以此来达到变量类型的抽象;
  4. C 语言是一个有结构化程序设计、具有变量作用域以及递归功能的过程式语言;
  5. C 语言传递参数一般是以值传递,也可以传递指针;
  6. 通过指针,C 语言可以容易地对内存进行低级控制,然而这加大了编程复杂度;
  7. 编译预处理让 C 语言的编译更具有弹性,比如跨平台。
优点
  • 相信程序员;
  • 不会阻止程序员做任何底层的事;
  • 保持语言的最小和最简的特性;
  • 保证 C 语言的最快的运行速度,那怕牺牲移值性。

C++

  1. 用引用来解决指针的问题。
  2. 用 namespace 来解决名字空间冲突的问题。
  3. 通过 try-catch 来解决检查返回值编程的问题。
  4. 用 class 来解决对象的创建、复制、销毁的问题,从而可以达到在结构体嵌套时可以深度复制的内存安全问题。
  5. 通过重载操作符来达到操作上的泛型。
  6. 通过模板 template 和虚函数的多态以及运行时识别来达到更高层次的泛型和多态。
  7. 用 RAII、智能指针的方式,解决了 C 语言中因为需要释放资源而出现的那些非常 ugly 也很容易出错的代码的问题。
  8. 用 STL 解决了 C 语言中算法和数据结构的 N 多种坑。

C++ 泛型(泛型的本质)

  1. 通过类中的构造、析构、拷贝构造,重载赋值操作符,标准化(隐藏)了类型的内存分配、释放和复制的操作。
  2. 通过重载操作符,可以标准化类型的比较等操作。
  3. 通过 iostream,标准化了类型的输入、输出控制。
  4. 通过模板技术(包括模板的特化),来为不同的类型生成类型专属的代码。
  5. 通过迭代器来标准化数据容器的遍历操作。
  6. 通过面向对象的接口依赖(虚函数技术),来标准化了特定类型在特定算法上的操作。
  7. 通过函数式(函数对象),来标准化对于不同类型的特定操作。

函数式编程(以 Stateless(无状态)和 Immutable(不可变)为主要特点)

  • first class function(头等函数):这个技术可以让你的函数就像变量一样来使用。也就是说,你的函数可以像变量一样被创建、修改,并当成变量一样传递、返回,或是在函数中嵌套函数。
  • tail recursion optimization(尾递归优化) : 我们知道递归的害处,那就是如果递归很深的话,stack 受不了,并会导致性能大幅度下降。因此,我们使用尾递归优化技术——每次递归时都会重用 stack,这样能够提升性能。当然,这需要语言或编译器的支持。Python 就不支持。
  • map & reduce:这个技术不用多说了,函数式编程最常见的技术就是对一个集合做 Map 和 Reduce 操作。这比起过程式的语言来说,在代码上要更容易阅读。(传统过程式的语言需要使用 for/while 循环,然后在各种变量中把数据倒过来倒过去的)这个很像 C++ STL 中 foreach、find_if、count_if 等函数的玩法。
  • pipeline(管道):这个技术的意思是,将函数实例成一个一个的 action,然后将一组 action 放到一个数组或是列表中,再把数据传给这个 action list,数据就像一个 pipeline 一样顺序地被各个函数所操作,最终得到我们想要的结果。
  • recursing(递归) :递归最大的好处就简化代码,它可以把一个复杂的问题用很简单的代码描述出来。注意:递归的精髓是描述问题,而这正是函数式编程的精髓。
  • currying(柯里化) :将一个函数的多个参数分解成多个函数, 然后将函数多层封装起来,每层函数都返回一个函数去接收下一个参数,这可以简化函数的多个参数。在 C++ 中,这很像 STL 中的 bind1st 或是 bind2nd。
  • higher order function(高阶函数):所谓高阶函数就是函数当参数,把传入的函数做一个封装,然后返回这个封装函数。现象上就是函数传进传出,就像面向对象对象满天飞一样。这个技术用来做 Decorator 很不错。

面向对象的优缺点

优点
  1. 能和真实的世界交相辉映,符合人的直觉。
  2. 面向对象和数据库模型设计类型,更多地关注对象间的模型设计。
  3. 强调于“名词”而不是“动词”,更多地关注对象和对象间的接口。
  4. 根据业务的特征形成一个个高内聚的对象,有效地分离了抽象和具体实现,增强了可重用性和可扩展性。
  5. 拥有大量非常优秀的设计原则和设计模式。
  6. S.O.L.I.D(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转,是面向对象设计的五个基本原则)、IoC/DIP……
缺点
  1. 代码都需要附着在一个类上,从一侧面上说,其鼓励了类型。
  2. 代码需要通过对象来达到抽象的效果,导致了相当厚重的“代码粘合层”。
  3. 因为太多的封装以及对状态的鼓励,导致了大量不透明并在并发下出现很多问题。

基于原型(Prototype)的编程与传统的面对象编程的比较

  1. 在基于类的编程当中,对象总共有两种类型。类定义了对象的基本布局和函数特性,而接口是“可以使用的”对象,它基于特定类的样式。在此模型中,类表现为行为和结构的集合,对所有接口来说这些类的行为和结构都是相同的。因而,区分规则首先是基于行为和结构,而后才是状态。
  2. 基于类的语言提倡使用一个关注分类和类之间关系的开发模型。与此相对,原型编程看起来提倡程序员关注一系列对象实例的行为,而之后才关心如何将这些对象划分到最近的使用方式相似的原型对象,而不是分成类。
  3. 在基于类的语言中,一个新的实例通过类构造器和构造器可选的参数来构造,结果实例由类选定的行为和布局创建模型。
  4. 在基于原型的系统中构造对象有两种方法,通过复制已有的对象或者通过扩展空对象创建。很多基于原型的系统提倡运行时进行原型的修改,而基于类的面向对象系统只有动态语言允许类在运行时被修改

声明式、命令式、逻辑的、函数式、面向对象的、面向过程的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++编程思想 目 录 译者序 前言 第1章 对象的演化 1 1.1 基本概念 1 1.1.1 对象:特性+行为 1 1.1.2 继承:型关系 1 1.1.3 多态性 2 1.1.4 操作概念:OOP程序像什么 3 1.2 为什么C++会成功 3 1.2.1 较好的C 3 1.2.2 采用渐进的学习方式 4 1.2.3 运行效率 4 1.2.4 系统更容易表达和理解 4 1.2.5 “库”使你事半功倍 4 1.2.6 错误处理 5 1.2.7 大程序设计 5 1.3 方法学介绍 5 1.3.1 复杂性 5 1.3.2 内部原则 6 1.3.3 外部原则 7 1.3.4 对象设计的五个阶段 9 1.3.5 方法承诺什么 10 1.3.6 方法应当提供什么 10 1.4 起草:最小的方法 12 1.4.1 前提 13 1.4.2 高概念 14 1.4.3 论述(treatment) 14 1.4.4 结构化 14 1.4.5 开发 16 1.4.6 重写 17 1.4.7 逻辑 17 1.5 其他方法 17 1.5.1 Booch 18 1.5.2 责任驱动的设计(RDD) 19 1.5.3 对象建模技术(OMT) 19 1.6 为向OOP转变而采取的策略 19 1.6.1 逐步进入OOP 19 1.6.2 管理障碍 20 1.7 小结 21 第2章 数据抽象 22 2.1 声明与定义 22 2.2 一个袖珍C库 23 2.3 放在一起:项目创建工具 29 2.4 什么是非正常 29 2.5 基本对象 30 2.6 什么是对象 34 2.7 抽象数据型 35 2.8 对象细节 35 2.9 头文件形式 36 2.10 嵌套结构 37 2.11 小结 41 2.12 练习 41 第3章 隐藏实现 42 3.1 设置限制 42 3.2 C++的存取控制 42 3.3 友元 44 3.3.1 嵌套友元 45 3.3.2 它是纯的吗 48 3.4 对象布局 48 3.5 48 3.5.1 用存取控制来修改stash 50 3.5.2 用存取控制来修改stack 51 3.6 句柄(handle classes) 51 3.6.1 可见的实现部分 51 3.6.2 减少重复编译 52 3.7 小结 54 3.8 练习 54 第4章 初始化与清除 55 4.1 用构造函数确保初始化 55 4.2 用析构函数确保清除 56 4.3 清除定义块 58 4.3.1 for循环 59 4.3.2 空间分配 60 4.4 含有构造函数和析构函数的stash 61 4.5 含有构造函数和析构函数的stack 63 4.6 集合初始化 65 4.7 缺省构造函数 67 4.8 小结 68 4.9 练习 68 第5章 函数重载与缺省参数 69 5.1 范围分解 69 5.1.1 用返回值重载 70 5.1.2 安全型连接 70 5.2 重载的例子 71 5.3 缺省参数 74 5.4 小结 81 5.5 练习 82 第6章 输入输出流介绍 83 6.1 为什么要用输入输出流 83 6.2 解决输入输出流问题 86 6.2.1 预先了解操作符重载 86 6.2.2 插入符与提取符 87 6.2.3 通常用法 88 6.2.4 面向行的输入 90 6.3 文件输入输出流 91 6.4 输入输出流缓冲 93 6.5 在输入输出流中查找 94 6.6 strstreams 96 6.6.1 为用户分配的存储 96 6.6.2 自动存储分配 98 6.7 输出流格式化 100 6.7.1 内部格式化数据 101 6.7.2 例子 102 6.8 格式化操纵算子 106 6.9 建立操纵算子 108 6.10 输入输出流实例 111 6.10.1 代码生成 111 6.10.2 一个简单的数据记录 117 6.11 小结 123 6.12 练习 123 第7章 常量 124 7.1 值替代 124 7.1.1 头文件里的const 124 7.1.2 const的安全性 125 7.1.3 集合 126 7.1.4 与C语言的区别 126 7.2 指针 127 7.2.1 指向const的指针 127 7.2.2 const指针 127 7.2.3 赋值和型检查 128 7.3 函数参数和返回值 128 7.3.1 传递const值 128 7.3.2 返回const值 129 7.3.3 传递和返回地址 131 7.4 133 7.4.1 里的const和enum 133 7.4.2 编译期间里的常量 134 7.4.3 const对象和成员函数 136 7.4.4 只读存储能力 139 7.5 可变的(volatile) 140 7.6 小结 141 7.7 练习 141 第8章 内联函数 142 8.1 预处理器的缺陷 142 8.2 内联函数 144 8.2.1 内部的内联函数 145 8.2.2 存取函数 146 8.3 内联函数和编译器 150 8.3.1 局限性 150 8.3.2 赋值顺序 150 8.3.3 在构造函数和析构函数里隐藏行为 151 8.4 减少混乱 152 8.5 预处理器的特点 153 8.6 改进的错误检查 154 8.7 小结 155 8.8 练习 155 第9章 命名控制 157 9.1 来自C语言中的静态成员 157 9.1.1 函数内部的静态变量 157 9.1.2 控制连接 160 9.1.3 其他的存储型指定符 161 9.2 名字空间 161 9.2.1 产生一个名字空间 162 9.2.2 使用名字空间 163 9.3 C++中的静态成员 166 9.3.1 定义静态数据成员的存储 166 9.3.2 嵌套和局部 168 9.3.3 静态成员函数 169 9.4 静态初始化的依赖因素 171 9.5 转换连接指定 174 9.6 小结 174 9.7 练习 174 第10章 引用和拷贝构造函数 176 10.1 C++中的指针 176 10.2 C++中的引用 176 10.2.1 函数中的引用 177 10.2.2 参数传递准则 178 10.3 拷贝构造函数 179 10.3.1 传值方式传递和返回 179 10.3.2 拷贝构造函数 182 10.3.3 缺省拷贝构造函数 187 10.3.4 拷贝构造函数方法的选择 188 10.4 指向成员的指针 ......
### 回答1: 好的,以下是Python考核题的汇总: 1. 如何在Python中读取文件? 使用Python内置的`open()`函数来打开文件并读取其内容,示例代码如下: ``` with open('file.txt', 'r') as file: contents = file.read() print(contents) ``` 2. 如何在Python中写入文件? 使用Python内置的`open()`函数来打开文件并写入内容,示例代码如下: ``` with open('file.txt', 'w') as file: file.write('Hello, world!') ``` 3. 如何在Python中使用条件语句? Python中的条件语句使用关键字`if`、`elif`和`else`来实现,示例代码如下: ``` num = 5 if num > 0: print('正数') elif num < 0: print('负数') else: print('零') ``` 4. 如何在Python中使用循环语句? Python中的循环语句有`for`循环和`while`循环,示例代码如下: ``` # for循环 for i in range(1, 11): print(i) # while循环 num = 1 while num <= 10: print(num) num += 1 ``` 5. 如何在Python中定义函数? 使用关键字`def`来定义函数,示例代码如下: ``` def add_numbers(x, y): return x + y ``` 6. 如何在Python中导入模块? 使用`import`关键字来导入模块,示例代码如下: ``` import math print(math.pi) ``` 7. 如何在Python中处理异常? 使用`try`和`except`关键字来捕获异常并进行处理,示例代码如下: ``` try: num = int(input('请输入一个整数:')) print('输入的整数是:', num) except ValueError: print('输入的不是整数') ``` 希望这些答案能够帮助你更好地理解Python编程。 ### 回答2: Python考核题汇总分为以下几个方面: 1. 数据型和基本语法:包括数字、字符串、列表、元组、字典等常用数据型的定义和操作,以及Python的基本语法,如变量的定义、条件判断、循环等。 2. 函数和模块:包括函数的定义和调用、参数的传递和返回值的使用等,以及如何导入和使用Python的模块来扩展功能。 3. 文件的读写操作:包括如何打开、读取和写入文件,以及文件的操作方法,如读取行、写入文件等。 4. 异常处理:包括如何处理程序中可能出现的异常情况,如try/except语句的使用,以及如何自定义异常。 5. 面向对象编程:包括的定义和实例化、属性和方法的使用、继承和多态等,以及面向对象的编程思想和设计原则。 6. 数据库操作:包括如何连接和使用数据库,如MySQL、SQLite等,以及进行增删改查等常用操作。 7. 网络编程:包括如何使用Python进行网络通信,如TCP/IP和UDP的Socket编程,以及HTTP请求和响应的处理等。 8. 正则表达式:包括正则表达式的基本语法和使用方式,以及常用的正则表达式方法和模块。 9. 多线程和多进程:包括如何使用Python进行多线程和多进程的编程,以及线程和进程之间的同步和通信等。 10. GUI编程:包括如何使用Python进行图形用户界面的开发,如使用Tkinter、PyQt等库进行界面设计和事件处理。 以上是Python考核题的汇总内容,通过综合掌握以上知识点,可以进行Python编程的基本应用和开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值