6、1、在面向对象的世界中,我们需要事先为所有的行动准备好方法并通过消息传递来调用方法,这样事物才会开始运作。
2、实际上,类、继承和多态应该被明确定义为能提高软件的可维护性和可重用行的结构。类将变量和子程序汇总在一起,创建独立性高的构件;多态和继承用于消除重复代码,创建通用性强的构件。另外,实例能够在运行时将实例变量在堆栈区展开,可以轻松地确保类的逻辑。
3、类的功能是汇总、隐藏和“创建多个实例”:1)汇总子程序和变量;2)隐藏只在类内部使用的变量和子程序;3)从一个类创建多个实例;
4、多态可以说是创建公用主程序的结构。公用主程序将被调用端的逻辑汇总成一个逻辑。而多态则相反,它统一调用端的逻辑,如下图所示:
多态吃统一调用子程序端的逻辑的结构,即创建公用主程序的结构。
5、继承就是“将类的共同部分汇总到其他类中的结构”,借助该结构,我们可以创建一个公用类来汇总变量和方法,其他类则可以完全借用其定义,即:继承是将类定义的共同部分汇总到另一个类中,并去除重复代码的结构。
6、用一句话概括异常:采用与返回值不同的形式,从方法返回特殊错误的结构。传统的子程序结构中,通常使用错误码来处理网络通信故障、硬盘访问故障或者数据库死锁等特殊情况,具体来说就是确定值的含义并将其作为子程序的返回值返回,但是这样的做法存在着如下问题:1)需要在应用程序执行错误码的判断处理,若忘记编写判断处理或者弄错值,那么在发生故障时很难确定具体原因,并且在添加删除错误码值的情况下,程序员需要亲自确认所有相关的子程序来改写。2)判断错误码的相同逻辑在子程序之间时连锁的。通常在调用端的子程序中必须编写判断错误码的值的逻辑。另外,在被调函数(即被调子程序)中无法执行错误的后续处理时,就会返回同样的错误码。如果错误码的判断在整个应用程序中连锁,那么程序逻辑就会变得很冗长。异常结构会在方法中声明可能会返回特殊错误,这种特殊错误的返回值就是异常,其语法不同于子程序的返回值。在声明异常的方法的调用方,有时在发生错误时并不执行特殊错误处理,而是将错误传递给更上层的调用方。在此类场景下,只需在方法中声明异常,没必要编写错误处理。异常可以将重复的错误处理汇总到一处,并且当忘记编写必要的错误处理时,编译器和运行环境会进行提醒,非常方便。这种结构可以达到去除冗余、防止出错的效果。
7、计算机的工作并不只是执行机器语言的命令,还有读写硬盘、使用打印机打印、与其他联网的计算机进行通信、等待来自键盘和鼠标的输入等等,需要与外部进行很多交互。这种与外部的交互对于人类而言可能只是一瞬间的事情,但对以毫秒和微秒为单位进行作业的CPU来说确实很长的等待时间。因此,如果在此期间只是默默等待,那么CPOU不执行作业的空闲时间占比就会很大。
8、栈区是用于线程的控制的内存区域。堆区供多个线程共同使用,而栈区则是为每个线程准备一个。各个线程依次调用子程序(在OOP中是方法)进行动作。栈区是用于控制子程序调用的内存区域,存储这子程序的参数、局部变量和返回位置等信息。
9、框架和类库都指可重用的软件构件群,一般会根据目的和使用方法区分二者。通常在称为类库的情况下,只是利用OOP结构创建的可重用构建,并不限制其目的和使用方法。但在称为框架的情况下,则并不只是只利用OOP闯将的类库,还指用于特定目的的应用程序的半成品。另外,从应用程序中的使用方法来说,并不是像传统的函数库那样简单地进行调用,而是从框架来调用应用程序。也就是说,在框架端预先提供基本的控制流程,在应用程序中嵌入自定义的特殊处理。如下图所示:
在这种框架中,多态和继承具有非常重要的作用:基本的处理由框架端提供,应用程序特有的处理规则利用多态进行调用,如好莱坞原则一般:所有的控制流程都由框架端决定,应用程序的处理规则使用多态在需要时进行调用。
10、计算机不会“完全替换”现实世界中的工作和娱乐,它只是为了让人们变轻松而承担了现实世界中的一部分工作。计算机擅长的是处理大规模的计算、记录信息等固定工作和记忆工作。即使是管理计算机的软件也只是承担了现实世界中的一部分工作,而不能表示现实世界本身。
11、在OOP中,消息传递是一种通过指定实例来调用类中汇总的子程序(方法)的结构,这种结构在上流工程中被应用于表示“具有某种特定功能的事物按照固定的方法相互联系的情形”的职责分配模型中。
12、类图表示静态信息,时序图和通信图表示动态信息。时序图中的“时序”有“连续”“顺序”的含义,因为是将方法调用表示为时间序列,所以才如此命名。由于OOP中的方法会指定对象实例来调用,所以时序图表示的是实例之间的相互作用。通信图表示的信息与时序图基本是一样的,区别在于通信图的表示方法以实例的关系为中心。三种图形的特征:1)类图表示类的定义信息和类之间的关系;2)时序图将运行时的实例之间的方法调用表示为时间序列;3)通信图将运行时的实例之间的方法调用以实例关系为中心进行表示,在通信图表示现实世界的情况下,实例就是人或者组织。在通信图表示程序结构的情况下,箭头表示消息调用,而在表示现实世界的情况下,则是通过对话等进行沟通的意思。
13、用例图用于明确表示计算机的工作范围。具体来说,就是确对象系统和外部(用户或者其他系统)的界限,简洁的表示交给计算机的工作内容。用例是用例图的中心,意思是“实际使用的例子”,此处指计算机提供给用户的功能。
14、活动图经常被用来表示现实世界的业务流程,虽然现实世界的工作流程也可以通过时序图和通信图来表示,但在分析实际的工作情况时,相比于人物的职责分配,理解整体流程可能更为重要。
15、面向对象并不是直接将现实世界表示为软件的技术,计算机只是承担了人们的一部分工资哦,并不会完全替换现实世界。因此当开发软件时,我们需要填补这道沟壑。
16、在推进软件开发时,需要进行如下三个阶段的工作:1)业务分析:整理现实世界的工作的推进方法,在此阶段,需要整理好如何对现实世界中的工作进行职责分配,以及如何推进工工作。除此之外,还应提取出业务相关的课题,并以此信息依据来确定交给计算机的工作,业务分析是整理为什么使用计算;2)需求定义:定义可以交给计算机的现实世界中尔等工作,由于计算机擅长记忆工作和固定工作,所以我们需要从现实世界中的工作中遴选出这些工作,需求定义相当于确定让计算干什么;3)设计:确定软件的编写方法,设计相当于确定管理计算机的软件如何实现。
16、易于维护和冲用的软件结构的目标汇总为如下三点:1)去除重复;2)提高构件的独立性;3)避免依赖关系发生循环;
17、在使用面向对象编写软件的情况下,无生命的事物会承担职责,互相发送消息,从而完成整个工作。通过这样的设计,可以提高类和包的独立以及整个软件的可维护性和可重用性。