编程思想笔记——第一章

来源:互联网 发布:sql语句美化工具开发 编辑:程序博客网 时间:2024/05/16 09:21
面向对象编程(OOP)

java五个基本特征:

(1) 所有东西都是对象。

(2)程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。

(3) 每个对象都有自己的存储空间,可容纳其他对象。封装

(4) 每个对象都有一种类型。

(5) 同一类所有对象都能接收相同的消息。


接口,上溯造型,封装,多态,有利于解耦。

new 一个对象,然后将结果赋值给句柄,通过句柄调用对应方法。

控制成员的访问:

第一个原因是防止程序员接触他们不该接触的东西——通常是内部数据类型的设计思想。若只是为了解决特定的问题,用户只需操作接口即可,毋需明白这些信息。

第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。

控制访问:public,private,protected 以及暗示性的 friendly修饰关键字。


继承:基础类 衍生类 都具有相同的接口。

改善基础类方式:1.根据具体需求添加新的方法2.重写方法

衍生类只改善基础类的函数,衍生类的一个对象换成基础类的一个对象!------>等价关系

衍生类添加新的函数,基础类访问新添加的函数。----->类似关系

将衍生类的对象当作基

础类的一个对象对待。忽略类型的特定细节,只与基础类打交道。程序具备了“扩展能力”,具有“扩展性”。


例子:

void doStuff(Shape s) {

s.erase();

// ...

s.draw();

}

Circle c = new Circle();

Triangle t = new Triangle();

Line l = new Line();

doStuff(c);

doStuff(t);

doStuff(l);


对于doStuff函数的参数接口可以说是上溯造型。衍生类型当作它的基本类型处理的过程叫作“Upcasting”(上溯造型)。

在将 draw()消息发给一个匿名 Shape 时,根据 Shape 句柄当时连接的实际类型,会相应地采取正确的操作。

将一条消息发给对象时,如果并不知道对方的具体类型是什么,但采取的行动同样是正确的,这种情况就叫作“多形性”(Polymorphism)。对面向对象的程序设计语言来说,它们用以实现多形性的方法叫作“动态绑定”。编译器和运行期系统会负责对所有细节的控制。


抽象:

基础类只为自己的衍生类提供一个接口。abstract 关键字。抽象方法也许只能在一个抽象类里创建。继承了一个类后,那个方法就必须实现,否则继承的类也会变成“抽象”类。通过创建一个抽象方法,我们可以将一个方法置入接口中,不必再为那个方法提供可能毫无意义的主体代码。

interface(接口)关键字将抽象类的概念更延伸了一步,它完全禁止了所有的函数定义。“接口”是一种相当有效和常用的工具。

java不支持多继承,但是可以实现多个接口。


对象创建时间和销毁:

c++:  

    存储以及存在时间可在编写程序时决定,只需将对象放置在堆栈(有时也叫作自动或定域变量)或者静态存储区域即可。这样便为存储空间的分配和释放提供了一个优先级。

java:  

    在一个内存池中动态创建对象,该内存池亦叫“堆”或者“内存堆”。若采用这种方式,除非进入运行期,否则根本不知道到底需要多少个对象,也不知道它们的存在时间有多长,以及准确的类型是什么。存储空间的管理是运行期间动态进行的,所以在内存堆里分配存储空间的时间比在堆栈里创建的时间长得多(在堆栈里创建存储空间一般只需要一个简单的指令,将堆栈指针向下或向下移动即可)。


集合于继承器:

“集合”亦叫作一个“容器”;其中包括集、队列、散列表、树、堆栈等。

如果是一个数组形式的实体,比如一个矢量(Vector),那么也许能用索引运算符或函数。

不是话,使用一个“继续器”(Iterator),它属于一种对象,负责选择集合内的元素,并把它们提供给继承器的用户。

Java 最开始(在 1.0 和 1.1 版中)提供的是一个标准继承器,名为 Enumeration(枚举),为它的所有集合类提供服务。Java 1.2 新增一个更复杂的集合库,其中包含了一个名为Iterator的继承器,可以做比老式的Enumeration更多的事情。

选择集合:

    集合提供了不同的接口类型以及外部行为(堆栈的接口与行为与队列的不同);不同的集合在进行特定操作时往往有不同的效率(矢量(Vector)和列表(List)的区别。

对矢量(相当于数组)内的元素进行的随机访问(存取)是一种常时操作;链接列表中,若想到处移动,并随机挑选一个元素,就需付出“惨重”的代价。)。 

    在设计阶段,我们可以先从一个列表开始。最后调整性能的时候,再根据情况把它换成矢量。由于抽象是通过继承器进行的,所以能在两者方便地切换,对代码的影响则显得微不足道。

 

单根结构:

在 Java 中(与其他几乎所有 OOP语言一样),对这个问题的答案都是肯定的,而且这个终级基础类的名字很简单,就是一个“Object”。

一个单根结构,加上所有对象都在内存堆中创建,可以极大简化参数的传递。

利用单根结构,我们可以更方便地实现一个垃圾收集器。与此有关的必要支持可安装于基础类中,而垃圾收集器可将适当的消息发给系统内的任何对象。


下溯造型与模板/通用性:

    “下溯造型”(Downcasting)。很难保证下溯造型的安全进行。但这也不是绝对危险的,因为假如下溯造型成错误的东西,会得到我们称为“违例”(Exception)的一种运行期错误。(try-catch)

        对于集合使用特制的,即使用泛型方式避免集合中的下溯造型的异常,类型转化,也就是强转。



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 福田口岸手表被扣怎么办? 网页显示与服务器连接失败怎么办 唯品会中发货无法清关怎么办 国际快递被海关扣了怎么办 我想开一家物流公司手续怎么办? 物流公司把我的货弄丢了怎么办 物流公司压司机工资怎么办 立元增压泵不出水怎么办 高浊度pac不沉怎么办 集水池中沉积大量污泥怎么办 电脑qq截图不好使怎么办 捡了个手机需要指纹怎么办 手机锁屏锁住了怎么办 三星屏锁忘记了怎么办 文字下面有蓝色直线怎么办 苹果x不能截屏了怎么办 u盘在电脑上打不开怎么办 电脑桌面上文档剪切了怎么办 苹果官网查不到保修日期怎么办 吃了发霉的花生怎么办 鸡吃大蒜多了怎么办 玖瑰花叶子黄怎么办 羊偷吃腥油和花生饼吃多了怎么办 肉牛眼睛有点变黄少吃东西怎么办 黑坑草鱼不开口怎么办 花生和瓜子受潮皮了怎么办? 菜叶上长了腻虫怎么办 磨辊耐磨层脱落怎么办 磨辊耐磨层小块脱落怎么办 密封胶皮圈松了怎么办 汽筒里胶皮垫密封不严怎么办 磁耦气缸脱磁了怎么办 无杆气缸行程大怎么办 c4d中模型变成线怎么办 内径槽异性需要车一刀怎么办 轴承太紧影响转速怎么办 电动车前轮蝶刹抱死怎么办 摩托三轮车油刹抱死怎么办 手动档汽车离合抱死怎么办 别克gl8后轮吃胎怎么办 扭力梁后轮吃胎怎么办