惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Full Disclosure
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
L
LINUX DO - 最新话题
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
宝玉的分享
宝玉的分享
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
月光博客
月光博客
博客园 - 叶小钗
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
D
DataBreaches.Net
酷 壳 – CoolShell
酷 壳 – CoolShell
B
Blog RSS Feed
量子位
美团技术团队
Vercel News
Vercel News
Y
Y Combinator Blog
IT之家
IT之家
Martin Fowler
Martin Fowler
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
SegmentFault 最新的问题
腾讯CDC
Recent Announcements
Recent Announcements
Google DeepMind News
Google DeepMind News
罗磊的独立博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
The Register - Security
The Register - Security
博客园 - 司徒正美
N
Netflix TechBlog - Medium
S
Schneier on Security
博客园 - 聂微东
U
Unit 42
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
雷峰网
雷峰网
Latest news
Latest news

博客园 - microsheen

[MDX学习笔记之五]优化Set操作——SUM中的CrossJoin [MDX学习笔记之四]Where vs. Subselect/Subcube [MDX学习笔记之三]MDX的上下文(Context) [MDX学习笔记之二]在MDX中处理边界情况 SQL Server 2005 SP2 CTP 在11月7号发布了 [MDX学习笔记之一]MDX中一些常见的计算 SSAS中Cube的结构 如何使用MDX编写同比和环比 SQL Server2005对XML的支持 2006 Tech.Ed 第二天见闻 2006 Tech.Ed 第一天见闻 C#简单命名指南 [.net泛型学习笔记之三]再测泛型的性能 [.net泛型学习笔记之二]泛型的性能 [.net泛型学习笔记之一]泛型介绍 [设计模式学习笔记之二]设计模式和量体剪衣 Note Three: studying JavaScript: The Definitive Guide, 4th Edition Note Two : studying JavaScript: The Definitive Guide, 4th Edition Note One —— studying JavaScript: The Definitive Guide, 4th Edition
[设计模式学习笔记之一]面向对象是什么?
microsheen · 2006-01-07 · via 博客园 - microsheen


        很多时候,我们理解面向对象是就方法加上数据,封装就是隐藏数据,但这并不全面。好比说,猫有一个脑袋、四条腿,一个尾巴一样,虽然没有错,但并不全面。从外表上来看,面向对象的确是这样,但其本质在哪里呢?让我们来看看《Design Patterns Explained》,它告诉我们一些什么。

功能分解 vs. 需求变化

        在面向对象之前,我们采用的开发方法是面向过程,而面向过程开发中最常用的一个分析方法是:功能分解。我们会把从客户那里得到的需求分解成模块,然后把模块分解成大的功能,然后把大的功能分解成小功能,最终分解成一个一个的函数。这样做非常容易,但是会产生一个问题:面向过程中的控制程序(一般是主程序)承担了太多的责任。

        控制程序什么都要管,就好像有的家庭过于溺爱孩子,孩子一切一切家长都包了,这样的孩子出去以后,往往受不得半点委屈,调节能力很差。采用面向过程开发的程序往往也是这样,它们过于脆弱,不能够应对需求变化。
    
责任分解 vs. 功能分解

        既然面向过程不能很好的应对变化,那面向对象和它的不同之处在哪里?答案就是——责任分解(shift of responsibility)。责任分解其实很简单,就是自己的事情自己做,自己对自己负责,就像家长不必事事都帮孩子做,指导一下,然后让他们自己去做,这样往往效果更好,家长也轻松的多。

        面向对象把一系列相同责任的方法和数据放在一个类里面,封装起来,这样内聚性提高了,从代码角度上说,减少了很多重复。另外,面向对象还把这些相似的类抽象起来,做成抽象类或接口,进一步减少重复代码。在对象之间相互调用的时候,往往依赖于抽象类和接口,这样,代码之间的耦合性大大降低了。一句话,面向对象的天生适合增加内聚性,减少耦合性,减少重复代码,这样便能更好的应对需求变化。

总结

        面向对象的关键在于责任分解。接口、继承、封装不光是为了隐藏数据,更重要的是隐藏类型,是松散耦合。