| 宇波님의 프로필[YYBOBO][宇宙波的技术空间]블로그리스트 | 도움말 |
|
My Friends
|
[YYBOBO][宇宙波的技术空间]享受技术带来的快乐! - yybobo1983.spaces.live.com 《自己动手写操作系统》作者自序 《自己动手写操作系统》作者(于渊)自序
你是否有过这样的经历,有一天你兴致勃勃买来一堆菜谱想学厨艺,翻开之后却发现自己根本没见过那些材料的名字,也不知道什么叫文火什么叫武火,什么叫上浆什么叫勾芡。而菜谱里根本没告诉你!你扔掉菜谱,垂头丧气,从此对厨艺失去兴趣。
你也可能会有这样的经历,当你在计算机课上学完了一堆C语言语法,想要大展身手实践一番的时候,突然发现你居然不知道源代码应该敲到哪里,是Word还是NotePad? 很多计算机自学者可能有过这样的经历,由于不知道如何跟踪调试,在辛辛苦苦编写的程序得不出正确的结果时,要么束手无策,要么用打印语句输出很多东西,费时费力,而教科书根本没教你这些操作的细节。 有可能在这些教科书作者的眼里,操作的细节不属于课程的一部分,或者这些细节看上去太容易,根本不值一提,甚至作者认为这些属于所谓“经验”的一部分,约定俗成是由学习者本人去摸索出来的。但是实际情况恰恰是,这些书中忽略掉的内容可能占去了一个初学者大部分的时间,甚至因此影响了学习的热情。 学C语言是很容易找到老师的,你会被详细地告知IDE是什么,以及如何使用。但是学习操作系统呢?你会发现绝大多数操作系统书籍都只讲原理,讲各种各样的算法和策略。如果是为了考试,你将内容背下来,最后可能得一个高分;如果是出于兴趣,怕是读了没几页就感到索然无味了。你或许的确能找到极少数的书籍告诉你怎样去写,比如Andrew S. Tanenbaum和Albert S. Woodhull的《操作系统:设计与实现》,但是两位先生还是没能告诉你从哪里开始。你还是不得不在一开始的时候在浩瀚的因特网上搜索一个BootSector的写法。 你或许听说过张五常,他为了研究经济学问题亲自跑到大街上去卖橘子,后来写成了著名的《卖橘者言》,成为了实证经济学的典范。他没有仅仅躲在房子里研究,因为他相信通过实践得来的经验才最可靠、最深刻的。我想他真的是一个喜欢追根究底的人。 你可能也喜欢探求问题的本质,想了解事情的各个细节。面对神奇的计算机世界,很想知道为什么打开电源,电脑屏幕上就能出现这样色彩斑斓的图像,很想知道操作系统理论书籍中讲到的进程管理到底怎样实现,很想知道DOS和Windows到底有什么本质上的区别,想知道怎样才能像那些伟大的黑客一样参与修改Linux的源代码。是的,我就是这样一个喜欢探求本质的人,对这一切怀有极大的兴趣,于是我想写一个自己的操作系统,因为我知道只有通过自己动手,才能对它有真正深刻的了解。经过一段时间的努力,我终于完成了一个雏形。回头想想,很庆幸自己能克服困难走了过来。同时,我在网上了解到还有很多朋友也在写自己的操作系统,也遇到了许多困难。为了跟大家分享其中的经验,让后来者不至于走同样的弯路,我把自己的开发过程记录下来,希望能为初学者们做参考。 本书有幸得到。。。。(省略)在此,谨向他们一并表示感谢! 最后,以下面四句诗与读者共勉: 在你立足处深挖下去, ——尼采 12월 18일 设计原则 - 开闭原则开闭原则(OCP, Open-Closed Principle)是面向对象的可复用设计(OOD, Object Oriented Design)的第一块基石。
开闭原则:一个软件实体应当对扩展开放,对修改关闭。英文原文是:Software entities should be open for extension, but closed for modification.
《太玄》论固革:“知固而不知革,物失其则;知革而不知固,物失其均。”(其实在google上搜一下这句话,所有文学哲学方面的信息都是“知因而不知革,物失其则;知革而不知因,物失其均”,是“因”而不是“固”)《太玄》的本意是:认为事物在变化的过程中有继承(因),也有变化(革)。有“革”而无“因”,事物不能发生;有“因”而无“革”,事物没有发展。
这个思想与开闭原则在理念上是一样的。任何的软件系统都不会一次定型,随着时间的推移,客户的需求将会发生变化,在系统面临新的需求时,既要做到向系统添加新的功能,又要保证系统设计稳定,这就是一个软件在设计时应该首先考虑到的。
我的体会,在代码的设计上,遵循开闭原则的表现是:当需要添加一个新的模块(一个新的类实体或是一种功能)时,应该在原系统核心代码不发生变化的前提下,加入新的代码用以实现新的功能。什么是核心代码呢?我觉得应该是让大家可以共享的部分,或者说可以想象得到的一旦改变了就会引发大量麻烦的部分。比如在JAVA中如果要写一个Frame,应该extends JFrame,而不是去修改JFrame的代码,所以说JAVA API还是很好的遵循了开闭原则(但是也有一些原则它也没有遵循,以后再写)。 此空间将被拆重建!此空间将被拆重建! |
|||||||||||
|
|