从今天开始,我开始总结GAO还通高老师《android道路的建筑师》,尝试一个星期写三个博客。

相对而言。看到这篇文章有点速度比你可以观看视频,刚才看的视频是更具体的。假设有兴趣,跟着我去的权利这一系列。我记录他们的理解,其它须要的人。

话不多说。今天開始第一篇,“基本OOP知识”。

对于现行的编程语言来说,面向对象已经不再是一个让人难以理解的词汇。但是怎样能将当中的思想完整的表达出来,这就是我们所须要在意的地方了。

本篇希望,高焕堂老师能带给我们不一样的世界。

一、Oriented 的含义

我们大多数情况下,将其理解为面向。原来我也将其理解为面对这类的意思,但是,我又听到了新的意义“信仰”。何为信仰,在基督教信徒的心中,耶稣就是他们的信仰,就是他们的神。除此之外再无其它。在设计师的心中,我们要将对象当成我们心中的“神”。我们有了问题,有了麻烦,仅仅能去求助与它。我们要相信软件的世界一切都是由对象组成的。除此之外,再无其它。

Oriented 完美的诠释了这一内涵。除了面向,还有“信仰”。在计算机的世界里,怎样将这样的信仰表现出来呢?仅仅须要定义类就能够了。

以下通过几个词来真正体会一下Oriented 的含义(Oriented based driven centered):

Based:

类比建造房子,先打地基。地基就是房子的基础。在 based  词汇描写叙述时,很多其它的强调的是一种先后关系。打地基在前。建房子在后。

再如 requiredment-based :基于需求,有先后顺序。先进行需求分析。然后基于需求分析的结果进行后期的软禁开发活动,就成为  requiredment-based software .

Driven :

我们理解 Driven 直译为驱动。这样的翻译事实上是不方便理解其真正含义的。事实上这个词语很多其它的是“引导”,指引方向(就非常像北极星存在的意义。指引人们前进的向)。就像司机 drive 车,事实上司机并没有真正的去驱动车前进。而是指引汽车前进的方向,引擎才是驱动车的真正动力。  Use Case Driven 用例驱动。是要告诉我们,我们的软件开发要依照用户的思维,用户的理解。在这个慷慨向不变的前提下。进行我们的软件开发。



     Centered :

以.....为中心。建设房子先画好设计图,建好房子的大梁(轮廓),后期的开发都是环绕着轮廓建造的。圣诞节的糖果盒礼物都是钩挂在圣诞树上一样。

Architecture-centered  一切软件开发活动都环绕着架构

Service-Oriented Architecture (SOA)是什么含义?

相信软件世界都是由服务全部构成的

二、从对象谈起

自然界有着各式各样的东西,人们随着阅历的添加,对于自然界的东西,认识越来越多。对于个人而言,所认识的东西。

皆是对象。比如,李白最清楚的对象是他的诗,每首诗就是对象。而欧洲的诗,就不是李白的对象了。从这样的角度而言。对象就是我们所能认识到的事物,最简单的。

一旦认识某一样东西,就能说出他的特点。并与其它对象比較一番。

自然界的对象特点包含:

    对象之特征或属性(静态特性)

    对象之行为(动态特性)



我们相信软件是由对象构成的,那么软件的对象就应该有自然界对象的特点

     软件的对象(Software object)是由数据(自然界对象的属相)和函数(描写叙述自然界对象的行为 )组成的。

三、类的用途:简述软件对象

类是群体,对象是类中的一份子,人们经常使用  Is A 来表达对象与类之间的关系。

类是一群具有共同重要特性之对象。类之定义就是说明这群对象具有什么的重要特性。特性包含对象之特征及行为。

软件中之对象以数据来表达特征,以函数来表达行为。因之,类之定义就是说明软件中之对象,应含那些数据及那些函数。

四、<基类\子类>结构的用途

1、表示继承

子类能够继承父类公共的属性和行为。也能够定义自己特有的属性和行为。方便复用

2、表示组合

THread 调用start 方法开启了一个新的线程,调用 runnable 中的 run 方法,就掉用到了子类 task 的方法

子类直接继承 扩充Thread    , Thread 产生一个子线程运行 run方法。

五、<基类\子类>结构的接口

所谓「卡榫(Hook)」,就是用来连接两个东西的接口。假设两个部分不是在同一个时间段出现的,则会预留一部分的虚空。给于另外一边未来时刻能以实体来填补该空间,两者虚实相依。就密合起来了。

设计优良的接口,能够轻易的实现新陈代谢、抽换自如、甚至能够让软件跨平台。

•变与不变的分离(Separate code that changes from the code that doesn’t)是设计卡榫(Hook)函数及应用框架之基本原则和手艺。

•分离出变(Variant)与不变(Invariant)部份之后,就能够将不变部份写在父类别(Super-class)里,而变的部份就写在子类别(Subclass)里。



分的目的就是为了更好地和在一起,把善变的东西分离出来



C++ 使用继承机承(Inherit)组合起来

Java  扩充 Extends 机制组合起来的





卡榫函数的Java实现:

    在Java里,使用抽象(abstract)函数或可覆写(overridable)函数来实现卡榫函数。

六、IOC机制与Default 函数

控制反转(IoC: Inversion of Control)

•IoC机制源自于OO语言(如C++等)的类别继承体系,比如C++语言中,基类的函数能够主动调用子类的函数,这就是典型的IoC机制。

基类与子类之间。主控权是在基类手上。透过Hook函数来调用子类

•通常基类是撰写在先,而子类则撰写在后。这样的前辈拥有主导权。进而「控制」后辈之情形,就通称为「控制反转」。

基类的重要功能:提供默认(预设)行为

•基类可事先定义很多「默认」(Default)函数。这些默认函数可让子类来继承(或调用)之。

七、主动型 vs 被动型 API

系统与人之间的接口:UI , 软件系统模块与模块之间的接口:API

API的类型

对于API来说。有三个与其紧密相关的三个动词:定义(Define) 实现 (Implememt) 调用(Invoke or Call) ,依据这三个角度,能够将API分为两类,主动型与被动型。

被动型API:我定义   我实现、对方调用(地头蛇)

主动型API:我定义、他人实现、我调用(强龙)

API的意义:

API换句话说,就是控制力。接口就是两方接触的地方,也是两方势力和底盘的接线。谁拥有接口的制定权。谁掌握控制点。就能获得较大的主动权。属于强龙的一方,而另外一方则处于被动地位,成为弱势的派对,玩蛇

版权声明:本文博主原创文章。博客,未经同意不得转载。

基OOP知识的更多相关文章

  1. Python OOP知识积累

    目录 目录 前言 对象 类 面向对象 Python 面向对象编程三个基本特征 封装 继承 继承的作用 泛化与特化 实现继承的方式 多重继承 多态 方法多态 最后 前言 Python是一个功能非常强大的 ...

  2. 图说OOP基础(一)

    本文用图形化的形式描述OOP的相关知识.对OOP进行系统化的梳理,以便掌握,仅供学习分享使用,如有不足之处,还请指正. 涉及知识点: OOP的相关知识 OOP知识总图 [Object-Orientat ...

  3. 【转载】图说OOP基础(一)

    本文用图形化的形式描述OOP的相关知识.对OOP进行系统化的梳理,以便掌握. 涉及知识点: OOP的相关知识 OOP知识[Object-Orientation Programming 面向对象编程]总 ...

  4. 如何学好JAVA编程

    我的思路:     1.我觉得先学学JSP,用纯JSP做个日记本简单的小系统,纯粹从语言层面上了解一些基   础知识,把tomcat玩熟了,就用记事本编就行,主要是熟悉,能够理解jsp运行机制.然   ...

  5. Ruby on Rails框架开发学习

    学习地址:http://www.ixueyun.com/lessons/detail-lessonId-685.html 一.课程概述 软件开发在经历了面向过程编程的阶段,现在正大行其道的是敏捷开发, ...

  6. PHP学习笔记05——面向对象

    <?php //1. 类的声明(包括构造方法.析构方法) class PersonA { var $name; //成员属性,用var声明 public $age; //当有其他修饰的时候,就不 ...

  7. C++学习之路,漫长而遥远

    一.C/C++语言 如果你的基础很差, 建议不要一开始就学C++语言,从C开始学起,对程序有个初步的认识,循序渐进.C语言的书嘛,先买一本 300 页以内的,把书中的每一个例子都通过键盘敲打进去到 V ...

  8. 架构设计的UML图形思考

    本篇紧接着上一篇   基本OOP知识  ,介绍高焕堂老师的第二讲. 架构设计的UML图形思考.本篇最重要的是三个词语:图形.思考.UML. 架构师的作用体现主要在项目开发前期.在整个项目还没有完毕的时 ...

  9. [原创] 上海招聘高级测试工程师(性能测试/自动化测试/App测试),长期有效

    [原创] 上海招聘高级测试工程师(性能测试/自动化测试/App测试方向),长期有效 高级测试工程师(性能/自动化方向) 1.负责性能测试计划,性能需求分析,性能测试方案和用例设计,搭建性能测试环境,执 ...

随机推荐

  1. HDU 2017 一系列统计数据

    一系列统计数据 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  2. xml它解析----DOM解析

    DOM模型(documentobject model) •DOM解析器在解析XML文档时,会把文档中的全部元素,依照其出现的层次关系.解析成一个个Node对象(节点). •在dom中.节点之间关系例如 ...

  3. hdu4190 简单的二分法

    题意是 有n个城市,m个投票箱.接下来n个城市人口数,每一个投票箱都不能为空.计算最后投票箱的容量必须达到多少,才干满足须要. 每一个城市的人必须仅仅能将票投到自己城市分得得投票箱中.要是容量最小箱子 ...

  4. Python爬虫框架Scrapy获得定向打击批量招聘信息

    爬虫,就是一个在网上到处或定向抓取数据的程序,当然,这样的说法不够专业,更专业的描写叙述就是.抓取特定站点网页的HTML数据.只是因为一个站点的网页非常多,而我们又不可能事先知道全部网页的URL地址, ...

  5. 【程序员小助手】Synergy,感受穿越屏幕之美

    内容简介 1.Synergy简介 2.Synergy安装与配置 3.附录 [程序员小助手]系列 在这个系列文章中(不定期更新),小编会把这些年(也没几年)的编程学习和工作中使用到的个人感觉非常好的软件 ...

  6. Git使用汇总

    1.下载代码,代码被下载到本地 git clone https://github.com/nuptboyzhb 2.提交代码 git commit -a -m "期间提交的信息叙述性说明&q ...

  7. 配置Tomcat出现Unsupported major.minor version 51.0

    在配置tomcat时,配置好jdk1.6,下载的tomcat8.0,结果执行start-up.bat,总是一闪而过,网上查了大量的资料,都说是可能是jdk没配置好,但实际上jdk的环境变量设置正常,后 ...

  8. Android 常规任务的高度【schedule】与【scheduleAtFixedRate】差额

    于android计划定期任务有两种方法 1.schedule 2.scheduleAtFixedRate 这两种方法的差别在于 首次调用时间(Date when)这个參数 <span style ...

  9. MVC 使用IBatis.net

    IBatis.net在asp.net MVC下的使用 IBatis.net 是2001年发起的开源项目,它是一个轻量级的ORM框架,现在IBatisNET已经是属于Apache下的一个子项目了,最新版 ...

  10. iOS_20_微博的骨架结构

    最后效果图: BeyondViewController.m // // BeyondViewController.m // 20_帅哥no微博 // // Created by beyond on 1 ...