【Java笔记整理1-2】面向对象程序设计OOP的基本概念


引入

如果接触过面向过程的C语言,那么再来接触面向对象的Java的会很好理解。毕竟OOP只是在过程型语言概念的基础上,又添加了许多概念而已。既然添加了许多概念,照理说Java程序比等价的过程型程序要复杂,但是实际上编写良好的Java程序通常要比过程型程序要简单的多,而且也更易于理解。那么,这么神奇的面向对象程序设计究竟是怎么样的呢?


知识点归纳(了解)

对象导论.png

1.抽象过程

1.1所有编程语言都提供抽象机制。人们所能解决问题的复杂性直接取决于抽象的类型和质量。
1.2面向对象思想实质:程序可以通过添加新类型的对象使自身适用于某个特定问题。
1.3对象具有状态、行为和标识

每个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为),并且每一个对象都可以唯一地与其他对象区分开来,亦即每一个可以存在于不同的机器和地址中的对象都有一个唯一的地址。

2.每个对象都有一个接口

2.1类是具有相同特性(数据元素)和行为(功能)的对象集合。类实际上是一个数据类型
2.2类是对象的抽象集合,对象是类的具体实例
2.3对象的接口定义了对象可以完成哪些任务。类决定接口。
示例.jpg

3.每个对象都提供服务

3.1把对象当做服务提供者

程序通过调用其他对象所能提供的服务来向用户提供服务。
当要解决一个问题时,我们可以想:我们需要哪些服务来解决这个问题?我们需要什么样的对象?这就将问题分解为对象集合了。

3.2提高对象的内聚性

不将过多的功能集合到一个对象中。每个对象都可以很好的完成一项任务,但不试图做更多的事情。还可以在其他地方复用。

示例.png

4.被隐藏的具体实现

4.1
程序员分类.png
4.2访问控制存在原因
  • 让类消费者无法触及不应该触及的部分
  • 允许类创建者可以改变类内部的工作方式而不用担心会影响到类消费者
4.3访问控制关键字

public、private、protected

5.复用具体实现

5.1组合——利用现成的类合成新的类,实现代码复用
  • 新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类的中想要的功能的方式所组成
  • 在创建新类的时候,组合比继承更加简单灵活

6.继承

6.1继承——以现有的类为基础,通过添加或修改这个副本来创建新类
  • 当源类(基类、超类、父类)发生变动时,被修改的副本(导出类、继承类、子类)也会随之变动
  • 父类型包含所有子类型所共享的特性和行为。可以创建一个父类型来表示系统中某些对象的核心概念,从父类型中导出其他子类型来表示此核心可以被实现的各种不同方式。
  • 子类拥有与父类相同的基础接口
继承的类型层次结构.JPG
6.2继承后父类与子类的差异性
  • 直接在子类中添加新的方法
  • 覆盖——改变父类方法的具体实现
差异性.jpg
6.3继承的is-a关系与is-like-a关系
  • is-a关系:只覆盖父类的方法,父类与子类的接口完全相同(替代原则)
  • is-like-a关系:添加新的接口元素,父类无法访问新添加的方法,父类与子类的接口并不完全相同

7.伴随多态的可互换对象

7.1将子类对象当做泛化的父类对象看待

存在的问题:如果某个父类的方法要让泛化的几何形状绘制自己,那么编译器在编译时是不可能知道应该执行哪一段代码的,那么,如何正确的调用子类对象的代码呢?

7.2通过向上转型(把子类看做父类的过程)机制实现多态
向上转型.JPG

8.单根继承结构

所有的类最终都继承自单一的基类Object。

9.容器(集合)

在任何时候都可以扩充自己以容纳置于其中的东西。
Java中具有满足不同需要的各种类型的容器,例如List(用于存储序列),Map(用来建立对象之间的关联),Set(每种对象类型只持有一个),还有队列、树、堆栈等构件

  • 不同容器提供了不同类型的接口和外部行为
  • 不同容器对某些操作具有不同的效率
  • 通过参数化类型(泛型)来限制容器存储的数据类型

10.对象的创建和生命期

使用对象时要特别关注它们的生成和销毁方式。

  • Java完全采用了动态内存分配方式。每当想要创建新对象时,就要使用new关键字来构建此对象的动态实例
  • Java提供“垃圾回收机制”来处理内存释放的问题

11.异常处理

  • 异常处理不是面向对象的特征,但是如何进行错误处理一直是最困难的问题之一。
  • 在面向对象语言中,异常是一种对象,它从出错地点“抛出”,并被专门设计用来处理特定类型错误的相应的异常处理器“捕获”。
  • 异常提供了一种从错误状况进行可靠恢复的途径。现在不再是只能退出程序,可以经常进行校正,并恢复程序的执行,这些都有助于编写出更健壮的程序

12.并发编程

  • 同一时刻处理多个任务
  • 共享资源处理过程:某个任务锁定某项资源,完成其任务,然后释放资源锁,使其他任务可以使用这项资源。

13.Java与Internet

13.1Web是一个巨型客户/服务器系统
13.2客户端编程

13.2.1插件
13.2.2脚本语言
13.2.3Java
13.2.4C#和.NET
13.4.5Internet与Intranet

13.3服务器端编程

注意事项

  • 这篇文章其实都是“对象”的大致轮廓而已,有很多知识还是挺模糊不清的。而且继承、多态、并发等问题都是只言片语无法了解透彻的。但是,正如画画都是从大到小,从轮廓到细致一步一步的过程。学习这门编程语言也应该有这样一个过程——先了解整体性的内容,再去逐步细化攻破每个重要点。

Q&A

1.

Q:如何区别面向过程和面向对象
A:以“行走”为研究对象,那么
面向过程——抬腿,往前放下,抬腿,放下
面向对象——将抬腿,放下封装成一个对象,这个对象具有“走”的功能


参考资料

《Java编程思想(第四版)》第一章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,560评论 18 399
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,041评论 0 4
  • (接上)为了孩子我承受了太多的苦,泪水忍不住哗哗往下流。第二天我找了人顶班,本想趁着公公外出旅游的这几天把自己的东...
    方华1阅读 210评论 0 0
  • 我已经好几天心事重重,不能很好的睡着了。 说不上为什么,我不放心,我焦虑,就算我明知我能把所有的事情都做完。 有时...
    微安安安安阅读 298评论 0 1
  • 呵呵呵
    ZicoTOP阅读 174评论 1 0