Java4android学习之对象导论

今天开始的这个礼拜,回补java基本知识,再次回炉学习。

1 , 程序员必须建立起在机器模型和设计待解问题的模型之间的关联。建立这种关联是费力的,而且不属于编程语言所固有的功能,使得编程难以编写,并且维护代价高昂,同时也产生了作为副产物的整个“编程方法”行业。

2,对象具有状态,行为和标识。状态:每个对象可以拥有内部数据(它给出了对象的状态);方法:它们产生的行为;并且每个对象都可以和其他对象区分开来,具体就是每个对象在内存中都存在唯一的地址。

3,每个对象都有一个接口。创建抽象数据类型(类)是面向对象程序设计的基本概念之一。类描述了具有相同特性(数据元素)和行为(功能)的对象集合。接口确定了对某一特定对象所能发出的请求。在程序中必须要有满足这些请求的代码,这就是实现。向某个对象发送消息,其实就是产生某个请求,而请求和方法关联,自然就进行了方法的调用。

4,每个对象都提供服务。我们需要构建一个合理的对象来解决我们面临的问题。所以如何将问题分解为对象是我们需要思考的问题。高内聚是软件设计的基本要求之一,这意味着一个软件构件的各个方面“组合”的很好。

5, 被隐藏的具体实现。将程序开发人员按照角色分为“创建者”(那些创建新数据类型的程序员)和“客户端程序员”(那些在应用中使用数据类型的消费者)是大有裨益的。一个类被隐藏的部分意味着创建者可以任意的修改它而不用担心对其他人造成影响。被隐藏的部分也是对象内部脆弱的部分,很容易被粗心的或者不知内情的客户端程序员所毁坏,因此将实现隐藏起来可以减少程序的bug。

访问控制的第一个存在原因是让客户端程序员无法触及他们不该触及的部分。第二个存在的原因是允许库设计者可以改变类内部的工作方式而不用担心影响到客户端程序员。

6,复用具体实现。代码复用是面向对象程序设计语言所提供的最了不起的优点之一。组合(composition)和聚合(aggregation)。组合常被视为“has-a”(拥有)关系。组合和聚合的区别是大多数人头痛的问题。聚合更为松散,它是“如果组合是动态发生的,那么它就是聚合”。可能还是很抽象,这我不得不举个《大话》里面的例子。组合,就好比大雁的翅膀和大雁的关系,大雁如果没了,大雁的翅膀肯定也就没了。聚合,就是大雁和雁群的关系,一个大雁它可以随时的加入到一个雁群里面,它还可以离开。关系就松散多了。

还有,能用组合关系就尽量用组合关系,而不是继承。

7,继承。为什么要有继承?因为我们想偷懒,当我们实现了一个类的时候,另外一个跟它类似的类,我们还是要重新定义,我们多么渴望通过拷贝现有的类然后改改就能够定义新的类。于是就有了“继承”。继承有个父类(基类),然后就是子类(导出类)。子类继承父类,父类的改动也会反映到子类。

当继承现有类型时,也就创造了新的类型。这个新的类型不仅包含了现有类型的所有成员(尽管private成员被隐藏起来了,而且不能访问),而且更为重要的是它复制了基类的接口。也就是说,所有可以发送给基类对象的消息都可以发送给导出类的对象。导出类和基类对接口的不同实现,即覆盖(Overriding)。导出类如果添加了新的接口,基类是无法访问的。这种关系虽然是继承,但是不是纯粹替代。叫"is-like-a",而不是“is-a"。

8,伴随多态的可互换对象。在处理类型的层次结构时候,经常把一个对象不当做它所属的特定类型来对待,而是将其当做基类的对象来对待。这使得我们可以编写出不依赖特定类型的代码。泛化(Generic)。添加新的类,并不需要更改调用它的地方,都统一采用基类来看待,来传递消息,却能够根据所传递的对象自身类型执行不同的实现。

那么如何实现这个机制的呢?这就引出了”前期绑定“和”后期绑定“。后期绑定是在程序运行的时候才能够确定它所调用的代码。(C++中采用virtual关键字来实现的,而Java中默认就打开)。把导出类看做是它的基类的过程叫做向上转型(Upcasting)

9,单根继承。C++ 和Java最争论的一个重要问题就是单继承和多继承的问题。这个问题各有各的好处,不过建议就是,如果你公司的代码以前有很多C代码,那么C++ 是比较好的;如果你的项目是从头开始,建议用Java。

10,容器。C++中,容器是标准C++ 类库的一部分,经常被称为标准模板库(Standard Template Library,STL)。Java中,具有满足不同需要的各种容器。在Java SE5之前,之前,容器的对象只有Java中通用类型:Object,这样进了容器,就只知道是Object类型,取出来的时候类型消失了,所以你要自己显式的向下转型,就是将Object转为你的类型,但有个问题,除非你确切的知道放进去的是什么,否则很容易发生放进去的是苹果,结果你非得说人家是凤梨,然后用凤梨在转人家,这样是会发生异常的。。

在Java SE5之后,Java容器增加了参数化类型,Java叫它范型。eg. ArrayList<Shap> shapes=new ArrayList<Shap>();这样就限定了我这个容器,只能够装Shape类型(当然,你懂得它的导出类也就是)。

11,对象的创建和生命期。C++认为效率控制是最重要的议题,所以它给了程序员选择的权利。为了追求最大的执行速度,对象的存储空间和生命期可以在编写程序的时候确定。Java是采用了动态内存分配的方式,在堆(Heap)内存池中动态创建对象。Java具有垃圾回收机制,当没有人引用这个对象的时候,对象会被释放。

12,异常处理:处理错误。异常发生的时候是不可以忽略的,你必须进行相应的处理,你可以在里面选择进一步校正,使得程序再次回到正规,或者你可以输出调试信息。而在C和C++中,经常用返回错误码来表示错误。但是,调用者却可以忽略你的错误码。。。所以,异常是具有强制性的。

13,并发编程。多线程问题。

14,Java和Internet。

时间: 2025-01-18 03:36:56

Java4android学习之对象导论的相关文章

Javascript学习4 - 对象和数组

原文:Javascript学习4 - 对象和数组 在Javascript中,对象和数组是两种基本的数据类型,而且它们也是最重要的两种数据类型. 对象是已命名的值的一个集合,而数组是一种特殊对象,它就像数值的一组有序集合. 4.1 关联数组的对象 Objects as Associative Arrays     对于对象,其属性相当于已命名的字符串值的一个集合.可以使用数组存取运算符[]来提取属性.     对象可以使用"."来存取一个对象属性,而数组更常用的存取属性运算符是[].下面

Java4Android类和对象的初始化详解

1,成员初始化 Java尽力保证:所有变量在使用前都能够恰当的初始化.  1)方法的局部变量.Java以编译时错误来贯彻这种保证.eg: void f(){ int i; i++; //Error , i not initialized }  2)类的数据成员.如果是基本类型,他们都会有一个初始值:如果是对象引用,那么这个引用将会被初始化为null. 指定初始化 如果想为某个变量赋值,该怎么做? 1)直接在定义类成员变量的地方为其赋值(注意,C++里面是不可以的,尽管C++新手们总想这么做) c

深入学习JavaScript对象_javascript技巧

JavaScript中,除了五种原始类型(即数字,字符串,布尔值,null,undefined)之外的都是对象了,所以,不把对象学明白怎么继续往下学习呢? 一.概述 对象是一种复合值,它将很多值(原始值或其他对象)聚合在一起,可通过属性名访问这些值.而属性名可以是包含空字符串在内的任意字符串. JavaScript对象也可以称作一种数据结构,正如我们经常听说的"散列(hash)"."散列表(hashtable)"."字典 (dictionary)"

obj-c编程01[扩展学习01]:对象消息机制工作原理

    obj-c中的类就像C语言中的struct.NSObject类声明一个成员变量isa,因为NSObject类是整个继承树的根,所以每个类中都有一个isa其指向创建的对象.在类结构中有实例变量(成员变量)和其类型以及类中方法的实现,并且每个类都有一个指针指向其父类: 类中的方法通过选择器(selector)索引,选择器是SEL类型.类中每一个方法名字都映射成一个唯一的int值,例如方法addObject可能映射成整数12.作为obj-c数据结构的一部分,存在一个表,它将方法的名字映射到它们

C#学习:对象的相等比较

一,引用类型相等比较: 共四种比较方法: 1:ReferenceEquals()方法,静态方法,测试两个引用是否指定同一个对象.而且认为null等于null. 1 Class1 x,y:2 x = new Class1();3 y = new Class1();4 bool B1 = ReferenceEquals(null,null);//true5 bool B2 = ReferenceEquals(null,x);//false6 bool B3 = ReferenceEquals(x,y

浅谈《think in java》:一 对象导论总结

  清单1. 抽象机制,面向对象程序设计方式 java所基于Smalltalk的特性表现一种纯粹的面向对象设计方式: 万物都是对象 程序是对象的集合(容器),他们通过发送消息(发送请求)来告知彼此所要做的. 每个对象有自己有其他对象所构成的储存(java中的所有基类是Object) 每个对象都拥有类型type 某一个特定类型所欲哦对象都可以接收同样的消息.   清单2.对象提供服务,被隐藏的具体实现   Light     on()   off()   对象Light -> 接口   Light

第1章 对象导论

这一章是对面向对象编程思想的一个概括的介绍,让我们了解其特性和一些思路,在这里摘要重要的语句作为小结. 面向对象程序设计(Object-oriented Programming,OOP)是一种计算机编程架构.OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成. 做个比喻:每个对象看起来都有点像一台微型计算机--它具有状态,还具有操作,用户可以要求对象执行这些操作. 1.1 基本特性 一种纯粹的面向对象程序设计方式会有什么样的特点呢? 来看看下面总结的五大特性: 1.万

jquery 学习之一 对象访问_jquery

each() each(callback) 以每一个匹配的元素作为上下文来执行一个函数. 意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素). 而且,在每次执行函数时,都会给函数传递一个表示作为执行环境的元素在匹配的元素集合中所处位置的数字值作为参数(从零开始的整形). 返回 'false' 将停止循环 (就像在普通的循环中使用 'break').返回 'true' 跳至下一个循环(就像在普通的循环中使用'continue'). Ex

JVM学习03_new对象的内存图讲解,以及引出static方法(转)

目录   -=-讲解对象创建过程中,-=-堆内存和栈内存的情况    -=-构造函数对类对象的成员变量的初始化过程    -=-构造函数出栈    -=-类的方法在不访问类对象的成员变量时造成的内存资源浪费怎么解决?    -=-引出static方法 扯淡 --明确概念:   -=-类:是对现实事物的抽象描述:举例:人,有年龄,姓名,高矮胖瘦等特征:有吃喝睡等行为动作:现实中的人由特征和行为组成{思想这种东东暂时还是不考虑吧} -=-怎么判别一个类里面时候需要有主函数mian():看这个类是否需