会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
躺柒
博客园
首页
新随笔
联系
订阅
管理
读编程与类型系统笔记08_面向对象变成的元素
合集 - 读编程与类型系统(12)
1.
编程与类型系统读后总结与感想
2023-01-25
2.
读编程与类型系统笔记01_类型简介
2023-01-08
3.
读编程与类型系统笔记02_基本类型
2023-01-09
4.
读编程与类型系统笔记03_组合
2023-01-10
5.
读编程与类型系统笔记04_类型安全
2023-01-11
6.
读编程与类型系统笔记05_函数类型
2023-01-12
7.
读编程与类型系统笔记06_函数类型的高级应用
2023-01-13
8.
读编程与类型系统笔记07_子类型
2023-01-14
9.
读编程与类型系统笔记08_面向对象变成的元素
2023-01-15
10.
读编程与类型系统笔记09_泛型数据结构
2023-01-17
11.
读编程与类型系统笔记10_泛型算法和迭代器
2023-01-18
12.
读编程与类型系统笔记11_高级类型及其他
2023-01-19
1.
面向对象编程
1.1.
(Object-Oriented Programming,OOP)
1.2.
基于对象的概念的一种编程范式
1.3.
对象可以包含数据和代码
1.4.
数据是对象的状态
1.5.
代码是一个或多个方法
1.5.1.
消息是方法,包括名称、实参和返回类型
1.6.
通过使用其他对象的方法,对象之间可以“对话”或者发送消息
1.7.
关键特征
1.7.1.
封装
1.7.1.1.
允许隐藏数据和方法
1.7.2.
继承
1.7.2.1.
用额外的数据和代码扩展一个类型
2.
接口
2.1.
契约
2.2.
描述了实现该接口的任何对象都理解的一组消息
2.3.
接口没有任何状态
2.4.
相当于书面协议
2.4.1.
规定了实现者将提供什么
2.5.
ConsoleLogger满足了ILogger的契约
2.5.1.
并不是一个ILogger
2.5.2.
Java和C#规定一个类只能从另外一个类继承,但它们允许类实现许多接口,这就是原因所在
2.6.
合并接口的能力允许我们从较小的、可重用的接口创建合并后的接口
2.7.
接口最终让消费者受益,而不是让实现接口的类获益
2.8.
“针对接口编程”是著名的OOP原则
3.
抽象类
3.1.
可以包含非抽象的方法或状态
3.2.
和具体类的唯一区别在于不能直接创建抽象类的实例
3.3.
ConsoleLogger和AbstractLogger之间的关系是所谓的“是”关系
3.3.1.
ConsoleLogger继承了AbstractLogger
3.3.2.
ConsoleLogger也是一个AbstractLogger
4.
继承
4.1.
子类是父类的子类型
4.1.1.
在期望使用父类的任何地方,都可以使用子类的实例
4.2.
继承会在子类型与父类型之间建立“是一个”关系
4.3.
不要创建出非常深的类层次
4.3.1.
一个对象的多个状态和方法可能来自层次结构中的不同级别,导致代码更难理解
4.4.
让子类是具体类,让层次结构上方的父类是抽象类,这是一个好主意
4.5.
尽可能多地使用final或sealed等关键字实现某个子类显式标记为不可继承
4.6.
使用继承来代表层次,或者通过使用抽象或重写方法来实现参数化行为
5.
组合
5.1.
比继承更好的方法
5.2.
只要可能,就优先选择组合而不是继承是著名的OOP原则
5.3.
“有一个”经验准则
5.3.1.
不是从一个类型继承行为,而是定义一个该类型的属性
5.3.2.
对于判断什么时候应该使用组合而言是一个很好的测试
5.4.
除非两个类型之间存在清晰的“是一个”关系,否则组合是可以默认使用的好方法
5.5.
组合在容器类型和被包含类型之间建立了一种“有一个”关系
5.6.
优点:组件属性的所有状态被封装在这些组件中,所以类型变得整洁多了
5.7.
不是把几个组件合并到一起,而是封装一个组件,并提供它需要的“胶水”代码,使其能够作为另外一种类型使用
6.
值类型和 引用类型
6.1.
在C#中结构是值类型
6.2.
除了原生提供的基本数值类型,Java不支持值类型
6.2.1.
几乎所有类型都是引用类型
6.3.
在C++中
6.3.1.
所有类型都是按值传递的,除非我们显式地将一个值声明为指针(*)或者引用(&)
6.3.2.
结构只是意味着其成员默认是公有的
6.3.3.
类的成员默认是私有的
6.4.
一些函数式语言
6.4.1.
使用不可变数据
6.4.2.
此时不存在值和引用之间的区别
7.
适配器模式
7.1.
能够让两个类变得兼容,而且不需要我们修改其中任何一个类
7.2.
对于处理我们无法修改的代码极为有用
7.2.1.
例如不在我们控制内的外部库的代码
7.3.
不修改类型,而是使用封装和组合让类型适配不同接口的一个例子
8.
混入
8.1.
有争议的概念
8.2.
混入行为通常是使用多重继承实现的
8.2.1.
扩展阅读了解”菱形继承”问题
8.3.
“是一个”经验准则发生了冲突
8.4.
在一个类型与其混入类型之间建立了“包含”关系
8.5.
许多语言为了保持简单,选择根本不支持混入
8.6.
大部分支持混入的语言中,混入另外一个类型与继承无法没有区别
8.7.
混入对于减少样板代码很有用
8.8.
混入最适合实现横切关注点(cross-cutting concern)
8.8.1.
引用计数
8.8.2.
缓存
8.8.3.
持久化
8.8.4.
日志
8.8.5.
安全
8.9.
编译时方案
8.9.1.
在C++中,我们可以使用多重继承来把一个类型声明为其他两个类型的组合
8.10.
运行时方案
8.10.1.
在TypeScript中的交叉类型
8.10.1.1.
使用extend()函数
8.11.
与继承不同,使用混入时,我们为不同的行为方面定义不同的类型,然后把它们合并起来,放到一个完整的类型中
8.11.1.
有一些属性和方法是特定对象所独有的
8.11.2.
另一些属性和方法是多个类型所共有的
8.12.
使用混合来为类型添加行为
9.
纯粹面向对象代码的替代方案
9.1.
它们不会替代OOP,但在一些情况中是更好的选择
9.2.
和类型
9.2.1.
以相同的方式传递不同类型的对象,或者把它们放到一个公共的集合中,使用和类型,此时不需要在类型之间建立任何关系,就可以获得相同的行为
9.3.
函数式编程
9.3.1.
避免了维护状态:函数可以接受一组实参,执行一些计算,然后返回结果,并不需要改变任何状态
9.3.2.
如果IExpression更加复杂,声明了多个方法,那么面向对象方法的效果可能更好
9.4.
泛型编程
合集:
读编程与类型系统
好文要顶
关注我
收藏该文
微信分享
躺柒
粉丝 -
50
关注 -
0
+加关注
0
0
升级成为会员
«
上一篇:
读编程与类型系统笔记07_子类型
»
下一篇:
C#代码整洁之道读后总结与感想
posted @
2023-01-15 14:03
躺柒
阅读(
73
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部
登录后才能查看或发表评论,立即
登录
或者
逛逛
博客园首页
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
相关博文:
·
读编程与类型系统笔记07_子类型
·
读编程与类型系统笔记03_组合
·
面向对象编程
·
面向对象的基础知识
·
面向对象编程(oop)
阅读排行:
·
【.NET】调用本地 Deepseek 模型
·
CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
·
DeepSeek “源神”启动!「GitHub 热点速览」
·
我与微信审核的“相爱相杀”看个人小程序副业
·
Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
公告
昵称:
躺柒
园龄:
2年1个月
粉丝:
50
关注:
0
+加关注
<
2025年2月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
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
1
2
3
4
5
6
7
8
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
合集
学信息系统项目管理师第4版(35)
学系统集成项目管理工程师(中项)(43)
读高性能MySQL(第4版)(21)
读发布!设计与部署稳定的分布式系统(第2版)(34)
随笔及总结(26)
读改变未来的九大算法(10)
读数据压缩入门(11)
读C#代码整洁之道(8)
读编程与类型系统(12)
读函数式编程思维(6)
读Java8函数式编程(9)
读Java实战(第二版)(20)
读Java性能权威指南(第2版)(31)
读SQL进阶教程(17)
选读SQL经典实例(23)
读SQL学习指南(第3版)(13)
读图数据库实战(11)
读程序员的制胜技(15)
读像火箭科学家一样思考(16)
读程序员的README(19)
读算法霸权(13)
读元宇宙改变一切(14)
读AI3.0(10)
读千脑智能(13)
读十堂极简人工智能课(9)
读人工不智能:计算机如何误解世界(10)
读算法的陷阱:超级平台、算法垄断与场景欺骗(20)
读所罗门的密码(21)
读天才与算法:人脑与AI的数学思维(26)
读人工智能时代与人类未来(19)
读AI未来进行式(12)
读AI新生:破解人机共存密码(18)
读人工智能全传(16)
读写给大家的AI极简史(7)
读零信任网络:在不可信网络中构建安全系统(21)
读软件开发安全之道:概念、设计与实施(17)
读软件设计的要素(7)
读构建可扩展分布式系统:方法与实践(16)
读数据湖仓(9)
读数据工程之道:设计和构建健壮的数据系统(34)
读数据质量管理:数据可靠性与数据质量问题解决之道(20)
读数据保护:工作负载的可恢复性(31)
读量子霸权(18)
读算法简史:从美索不达米亚到人工智能时代(15)
读当我点击时,算法在想什么?(7)
读DAMA数据管理知识体系指南(4)
更多
随笔档案
2025年2月(25)
2025年1月(31)
2024年12月(31)
2024年11月(30)
2024年10月(31)
2024年9月(30)
2024年8月(31)
2024年7月(31)
2024年6月(30)
2024年5月(31)
2024年4月(30)
2024年3月(31)
2024年2月(29)
2024年1月(31)
2023年12月(31)
2023年11月(30)
2023年10月(31)
2023年9月(30)
2023年8月(31)
2023年7月(31)
2023年6月(30)
2023年5月(31)
2023年4月(31)
2023年3月(36)
2023年2月(28)
2023年1月(26)
阅读排行榜
1. C#代码整洁之道读后总结与感想(599)
2. 选读SQL经典实例笔记01_检索和排序(369)
3. 读C#代码整洁之道笔记01_C#的编码标准和原则(311)
4. 读C#代码整洁之道笔记04_重构C#代码识别代码坏味道(309)
5. 学信息系统项目管理师第4版系列02_法律法规(268)
评论排行榜
1. 2023年1月随笔(11)
2. 2023年10月随笔之婚宴趣事多(2)
3. 读高性能MySQL(第4版)笔记12_查询性能优化(下)(2)
4. 读Java性能权威指南(第2版)笔记18_垃圾回收E(2)
推荐排行榜
1. 读高性能MySQL(第4版)笔记01_MySQL架构(上)(2)
2. 选读SQL经典实例笔记01_检索和排序(2)
3. 读软件设计的要素01概念(1)
4. 读AI未来进行式笔记01深度学习(1)
5. 读所罗门的密码笔记01_当人类遇见机器(1)
最新评论
1. Re:2023年10月随笔之婚宴趣事多
@gz4621 wondershare mindmaster...
--躺柒
2. Re:2023年10月随笔之婚宴趣事多
大神 思维导图用的什么软件制作的?
--gz4621
3. Re:读高性能MySQL(第4版)笔记12_查询性能优化(下)
@东围居士 建议读新版。...
--躺柒
4. Re:读高性能MySQL(第4版)笔记12_查询性能优化(下)
第4版相比第3版好像缩减了好多内容?楼主推荐第3版还是第4版
--东围居士
5. Re:读Java性能权威指南(第2版)笔记18_垃圾回收E
@屠炉 没有用第三方工具,手动的。 有几个平台直接支持markdown导入,只是要调整一下图片上传即可。...
--躺柒
点击右上角即可分享
支持DeepSeek的编程助手
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库