高级抽象

多年前留下来的,但不记得从哪位大神的blog里拷贝下来的,暂记于此。

1、认识到本质,才能让你的程序具备更大的灵活性和扩展性。在软件开发中,抽象能力体现为对问题域的理解能力,对领域模型的抽象。合理的抽象也是代码重构的前提,每一次重构,都是向更好的抽象迈进了一步。这是一个优秀高级程序员所应该具备的能力。

2、提高抽象思维的能力就是提高抽取不同事物的共性的能力,不同的事物不仅仅是包括现实中具体的事物。引入到编程语言里:抽象类是一类事物的高度聚合,而接口是定义行为规范。聚合(抽象abstract)<——>分解(接口interface)。

3、程序员的技术能力模型

“编程语言30% +抽象能力(数据结构50% + 对现实事实的抽象理解能力10% + 设计模式能力10%)70% = 100%。”

4、数据结构能力(逻辑能力)则具体体现在代码的实现上:高质量的代码需要很强的逻辑性,逻辑严谨,Bug就少;在一些对代码执行效率要求严格的应用上,好的算法实现更需要好的数据抽象能力,数据结构就是对数据逻辑的一种抽象。

5、单一职责(SRP)原则就是一个类应该仅有一个引起它变化的原因。你不希望因为电脑内存损坏而更换CPU吧,同样也不应该让一个类有多种修改的理由。

6、开放封闭(OCP)原则就是类模块,对扩展开放,对更改封闭。你一定不希望电脑只有一个内存槽,加内存就要换主板吧,程序也应该能在不修改原先程序的情况下就能扩展功能。

7、里氏替换(LSP)原则就是任何基类可以出现的地方,子类也可以出现。如果你买的DX10显卡不支持DX10特性,那么这个显卡一定没法用。如果父类的方法在子类中没有实现那就晕了。在程序的世界中千万别认为是鸟都会飞,先考虑清楚将会有哪些鸟吧。

8、依赖倒置(DIP)原则就是要依赖抽象,而不要依赖具体的高层模块,也不应该依赖于底层模 块,二者都应该依赖抽象。抽象不应该依赖于实现细节,实现细节应该依赖于抽象。针对接口编程,这样即使实现有变也不需要修改外部代码。其实,现在电脑的硬 件、网络通信等都符合这个原则,比如USB接口、内存接口(SIMM、DIMM和RIMM等)、显卡接口(PCI、AGP、PCI Express等)、TCP/IP。

9、接口隔离(ISP)原则就是不应该强迫客户程序依赖于它们不用的方法。花3000元买一个带 拍照、听MP3功能的手机还是花1000元买一个手机、1000元买一个MP5、1000元买一个数码相机呢?买了前者的话手机动不动就要修,而且还不一 定是因为不能打电话而修,买了后面三样的话,即使修也不影响其他设备使用,你说买哪个?

10、总结与提升

抽象类是一类事物的高度聚合,而接口是定义行为规范。聚合(抽象abstract)<——>分解(接口interface)。

11、程序员的技术能力模型:

编程语言30% +抽象能力(数据结构50% + 对现实事实的抽象理解能力10% + 设计模式能力10%)70% = 100%。

每个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动,核心是提供了相关问题的解决方案。

时间: 2024-09-29 20:27:04

高级抽象的相关文章

Cobbler实现无人值守安装系统

防伪码:没有相当程度的孤独是不可能有内心的平和. 1.概述 本文部分图片源自网络,侵删. 1.1 介绍 官网地址 http://cobbler.github.io/ 官网介绍:Cobbleris a Linux installation server that allows for rapid setup of networkinstallation environments. It glues together and automates many associatedLinux tasks

软件系统的设计和实现

1.引言 “Hello,wolrd!(世界,你好!)”,我写一些技术性的文章已经有一段时间了,最近一段闲暇时间我没有休息,而是思考我可以写一些东西,可以对朋友们提升开发技能提供一些可能的帮助.自从来到 Stratum Security 公司工作后,我已经从无到有建立了几个新系统并做了好些设计.文档.重构工作.我认识到将这些事情记录到一处可能有些用处,能够帮助减少为了获取这些概念去阅读不同文章的压力. 2.目标人群 我一直想要分享一些经验,分享这些年从编程和最近工作中学到的经验,但是在博客中我不想

130242014062-黄凌逸-实验一

实验报告 课程:  软件体系结构与设计      实验名称:  软件设计的网络支持环境 专业:    软件工程             学  号      130242014062 姓名:  黄凌逸       实验日期:  2017年 9月14 日  报告退发 (订正 . 重做) 一.实验目的                                                                                         l  掌握权限的分配.复习

130242014060-郑佳敏-实验一

软件体系结构实验报告 课程:   软件体系结构           实验名称:  软件设计的网络支持环境 专业:     软件工程             学  号       130242014060 姓名:   郑佳敏        实验日期:  2017年 9月14 日  报告退发 (订正 . 重做) 一.实验目的                                                                                        

C++开源库,欢迎补充

C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年.因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应 用.当Java横行天下之后,MS又突然发力,搞出C#语言,有大片的曾经的C++程序员,以为C++要就此沉沦,未料,这三年来,C++的生命力突然被 严重地增强了.主力原因就是开源的软件.基础软件(比如并发原生支持,比如Android必定要推出原生的SDK).各种跨平台应用的出现. 开源C++库必须具有以下特点:必须是成熟的产品.跨平台的产品.相对通用的库

RabbitMQ学习2---使用场景

RabbitMQ主页:https://www.rabbitmq.com/ AMQP AMQP协议是一个高级抽象层消息通信协议,RabbitMQ是AMQP协议的实现.它主要包括以下组件: 1.Server(broker): 接受客户端连接,实现AMQP消息队列和路由功能的进程. 2.Virtual Host:其实是一个虚拟概念,类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,但是权限控制的最小粒度是Virtual Host 3.Exchange:接受生产

TypeScript Declaration Merging(声明合并)

TypeScript中有一些独特的概念,来自需要描述JavaScript对象类型发生了哪些变化.举个例子,最为独特的概念就是"声明合并".理解了这个概念将会对你在当前JavaScript项目中使用TypeScript开发很有帮助.同时也打开了了解更高级抽象概念的门. 就本文目的而言,声明合并是指编译器执行将两个名称相同的声明合并到一个单独的声明里的工作.合并后的声明具有两种原始声明的特性.当然,声明合并不限于合并两个声明,需要合并的声明数量可任意(注意:他们之间具有相同名称). 基本概

软件体系结构原理、方法与实践总结

第1章:软件体系结构概论 什么是软件危机,软件危机的具体表现有哪些? 软件危机:落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象. 软件危机的表现: 软件成本日益增长,开发进度难以控制,软件质量差,软件维护困难 产生软件危机的原因,如何克服软件危机? 产生软件危机的原因有用户需求不明确,缺乏正确的理论指导,软件规模越来越大,软件复杂度越来越高. 人们面临的不光是技术问题,更重要的是管理问题.要提高软件开发效率,提高软件产品质量,必须采用工程

与Javascript相关的数据结构和算法

著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:豪情链接:http://www.zhihu.com/question/36882354/answer/69416260来源:知乎 建议先打好基础,了解js语言的特性或玩法,然后再来玩算法,个人感觉才能四两拨千斤,算法这种东西,是高级抽象的东西,简单说:是熟悉计算机语言解决日常需求的前提下,熟练的选择一种高效的做事方式,先了解如何将日常的需求或人类的自然语言转换为计算机语言,然后在进一步的确定算法在整个代码开发中所扮演的角色