自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解讀面向?qū)ο蟮某绦蛟O(shè)計(jì)(一)

開(kāi)發(fā) 開(kāi)發(fā)工具
本系列介紹的是面向?qū)ο蟮某绦蛟O(shè)計(jì),本文是第一篇,希望對(duì)你有幫助,一起來(lái)看。

面向?qū)ο缶幊?/strong>(ObjectOrientedProgramming,OOP,面向?qū)ο蟪绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu)。OOP的一條基本原則是計(jì)算機(jī)程序是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。OOP達(dá)到了軟件工程的三個(gè)主要目標(biāo):重用性、靈活性和擴(kuò)展性。為了實(shí)現(xiàn)整體運(yùn)算,每個(gè)對(duì)象都能夠接收信息、處理數(shù)據(jù)和向其它對(duì)象發(fā)送信息。OOP主要有以下的概念和組件:

組件

數(shù)據(jù)和功能一起在運(yùn)行著的計(jì)算機(jī)程序中形成的單元,組件在OOP計(jì)算機(jī)程序中是模塊和結(jié)構(gòu)化的基礎(chǔ)。

抽象性

程序有能力忽略正在處理中信息的某些方面,即對(duì)信息主要方面關(guān)注的能力。

封裝

也叫做信息封裝:確保組件不會(huì)以不可預(yù)期的方式改變其它組件的內(nèi)部狀態(tài);只有在那些提供了內(nèi)部狀態(tài)改變方法的組件中,才可以訪問(wèn)其內(nèi)部狀態(tài)。每類組件都提供了一個(gè)與其它組件聯(lián)系的接口,并規(guī)定了其它組件進(jìn)行調(diào)用的方法。

多態(tài)性

組件的引用和類集會(huì)涉及到其它許多不同類型的組件,而且引用組件所產(chǎn)生的結(jié)果得依據(jù)實(shí)際調(diào)用的類型。

繼承性

允許在現(xiàn)存的組件基礎(chǔ)上創(chuàng)建子類組件,這統(tǒng)一并增強(qiáng)了多態(tài)性和封裝性。典型地來(lái)說(shuō)就是用類來(lái)對(duì)組件進(jìn)行分組,而且還可以定義新類為現(xiàn)存的類的擴(kuò)展,這樣就可以將類組織成樹(shù)形或網(wǎng)狀結(jié)構(gòu),這體現(xiàn)了動(dòng)作的通用性。

由于抽象性、封裝性、重用性以及便于使用等方面的原因,以組件為基礎(chǔ)的編程在腳本語(yǔ)言中已經(jīng)變得特別流行。Python和Ruby是最近才出現(xiàn)的語(yǔ)言,在開(kāi)發(fā)時(shí)完全采用了OOP的思想,而流行的Perl腳本語(yǔ)言從版本5開(kāi)始也慢慢地加入了新的面向?qū)ο蟮墓δ芙M件。用組件代替“現(xiàn)實(shí)”上的實(shí)體成為JavaScript(ECMAScript)得以流行的原因,有論證表明對(duì)組件進(jìn)行適當(dāng)?shù)慕M合就可以在英特網(wǎng)上代替HTML和XML的文檔對(duì)象模型(DOM)。

oop的基本思想

OOP的許多原始思想都來(lái)之于Simula語(yǔ)言,并在Smalltalk語(yǔ)言的完善和標(biāo)準(zhǔn)化過(guò)程中得到更多的擴(kuò)展和對(duì)以前的思想的重新注解??梢哉f(shuō)OO思想和OOPL幾乎是同步發(fā)展相互促進(jìn)的。

與函數(shù)式程序設(shè)計(jì)(functional-programming)和邏輯式程序設(shè)計(jì)(logic-programming)所代表的接近于機(jī)器的實(shí)際計(jì)算模型所不同的是,OOP幾乎沒(méi)有引入精確的數(shù)學(xué)描敘,而是傾向于建立一個(gè)對(duì)象模型,它能夠近似的反映應(yīng)用領(lǐng)域內(nèi)的實(shí)體之間的關(guān)系,其本質(zhì)是更接近于一種人類認(rèn)知事物所采用的哲學(xué)觀的計(jì)算模型。由此,導(dǎo)致了一個(gè)自然的話題,那就是OOP到底是什么?[D&T1988][B.S1991].。

在OOP中,對(duì)象作為計(jì)算主體,擁有自己的名稱,狀態(tài)以及接受外界消息的接口。在對(duì)象模型中,產(chǎn)生新對(duì)象,舊對(duì)象銷毀,發(fā)送消息,響應(yīng)消息就構(gòu)成OOP計(jì)算模型的根本。

對(duì)象的產(chǎn)生有兩種基本方式。

一種是以原型(prototype)對(duì)象為基礎(chǔ)產(chǎn)生新的對(duì)象。

一種是以類(class)為基礎(chǔ)產(chǎn)生新對(duì)象。

原型的概念已經(jīng)在認(rèn)知心理學(xué)中被用來(lái)解釋概念學(xué)習(xí)的遞增特性,原型模型本身就是企圖通過(guò)提供一個(gè)有代表性的對(duì)象為基礎(chǔ)來(lái)產(chǎn)生各種新的對(duì)象,并由此繼續(xù)產(chǎn)生更符合實(shí)際應(yīng)用的對(duì)象。而原型-委托也是OOP中的對(duì)象抽象,代碼共享機(jī)制中的一種。一個(gè)類提供了一個(gè)或者多個(gè)對(duì)象的通用性描敘。

從形式化的觀點(diǎn)看,類與類型有關(guān),因此一個(gè)類相當(dāng)于是從該類中產(chǎn)生的實(shí)例的集合。而這樣的觀點(diǎn)也會(huì)帶來(lái)一些矛盾,比較典型的就是在繼承體系下,子集(子類)對(duì)象和父集(父類)對(duì)象之間的行為相融性可能很難達(dá)到,這也就是OOP中常被引用的---子類型(subtype)不等于子類(subclass)[Budd2002]。而在一種所有皆對(duì)象的世界觀背景下,在類模型基礎(chǔ)上還誕生出了一種擁有元類(metaclass)的新對(duì)象模型。即類本身也是一種其他類的對(duì)象。

以上三種根本不同的觀點(diǎn)各自定義了三種基于類(class-based),基于原型(prototype-based)和基于元類(metaclass-based)的對(duì)象模型。而這三種對(duì)象模型也就導(dǎo)致了許多不同的程序設(shè)計(jì)語(yǔ)言(如果我們暫時(shí)把靜態(tài)與動(dòng)態(tài)的差別放在一邊)。是的,我們經(jīng)常接觸的C++,Java都是使用基于類的對(duì)象模型,但除此之外還有很多我們所沒(méi)有接觸的OOPL采用了完全不一樣的對(duì)象模型,他們是在用另外一種觀點(diǎn)詮釋OOP的內(nèi)涵。

什么是oop的基本思想呢?

把組件的實(shí)現(xiàn)和接口分開(kāi),并且讓組件具有多態(tài)性。不過(guò),兩者還是有根本的不同。oop強(qiáng)調(diào)在程序構(gòu)造中語(yǔ)言要素的語(yǔ)法。你必須得繼承,使用類,使用對(duì)象,對(duì)象傳遞消息。gp不關(guān)心你繼承或是不繼承,它的開(kāi)端是分析產(chǎn)品的分類,有些什么種類,他們的行為如何。

就是說(shuō),兩件東西相等意味著什么?怎樣正確地定義相等操作?不單單是相等操作那么簡(jiǎn)單,你往深處分析就會(huì)發(fā)現(xiàn)“相等”這個(gè)一般觀念意味著兩個(gè)對(duì)象部分,或者至少基本部分是相等的,據(jù)此我們就可以有一個(gè)通用的相等操作。

再說(shuō)對(duì)象的種類

假設(shè)存在一個(gè)順序序列和一組對(duì)于順序序列的操作。那么這些操作的語(yǔ)義是什么?從復(fù)雜度權(quán)衡的角度看,我們應(yīng)該向用戶提供什么樣的順序序列?該種序列上存在那些操作?那種排序是我們需要的?只有對(duì)這些組件的概念型分類搞清楚了,我們才能提到實(shí)現(xiàn)的問(wèn)題:使用模板、繼承還是宏?使用什么語(yǔ)言和技術(shù)?gp的基本觀點(diǎn)是把抽象的軟件組件和它們的行為用標(biāo)準(zhǔn)的分類學(xué)分類,出發(fā)點(diǎn)就是要建造真實(shí)的、高效的和不取決于語(yǔ)言的算法和數(shù)據(jù)結(jié)構(gòu)。

當(dāng)然最終的載體還是語(yǔ)言,沒(méi)有語(yǔ)言沒(méi)法編程。stl使用c++,你也可以用ada來(lái)實(shí)現(xiàn),用其他的語(yǔ)言來(lái)實(shí)現(xiàn)也行,結(jié)果會(huì)有所不同,但基本的東西是一樣的。到處都要用到二分查找和排序,而這就是人們正在做的。對(duì)于容器的語(yǔ)義,不同的語(yǔ)言會(huì)帶來(lái)輕微的不同。但是基本的區(qū)別很清楚是gp所依存的語(yǔ)義,以及語(yǔ)義分解。

例如,我們決定需要一個(gè)組件swap,然后指出這個(gè)組件在不同的語(yǔ)言中如果工作。顯然重點(diǎn)是語(yǔ)義以及語(yǔ)義分類。而oop所強(qiáng)調(diào)的(我認(rèn)為是過(guò)分強(qiáng)調(diào)的)是清楚的定義類之間的層次關(guān)系。oop告訴了你如何建立層次關(guān)系,卻沒(méi)有告訴你這些關(guān)系的實(shí)質(zhì)。

(這段不太好理解,有一些術(shù)語(yǔ)可能要過(guò)一段時(shí)間才會(huì)有合適的中文翻譯——譯者)

面向?qū)ο蟮木幊谭椒∣OP是九十年代才流行的一種軟件編程方法。它強(qiáng)調(diào)對(duì)象的“抽象”、“封裝”、“繼承”、“多態(tài)”。我們講程序設(shè)計(jì)是由“數(shù)據(jù)結(jié)構(gòu)”+“算法”組成的。從宏觀的角度講,OOP下的對(duì)象是以編程為中心的,是面向程序的對(duì)象。我們今天要講的OOD是面向信息的對(duì)象,是以用戶信息為中心的。

進(jìn)一步閱讀:解讀面向?qū)ο蟮某绦蛟O(shè)計(jì)(二)

【編輯推薦】

  1. 程序設(shè)計(jì)中的計(jì)算復(fù)用(Computational Reuse)
  2. C#面向?qū)ο蟪绦蛟O(shè)計(jì)與框架
  3. 程序設(shè)計(jì)的Top 10做與不做
  4. JavaEE程序設(shè)計(jì)與應(yīng)用開(kāi)發(fā)
責(zé)任編輯:于鐵 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-07-05 15:59:57

面向?qū)ο缶幊?/a>

2011-07-05 16:05:43

面向?qū)ο缶幊?/a>

2022-06-07 14:13:58

Simula編程語(yǔ)言GNU cim

2012-03-14 10:48:05

C#

2009-10-21 17:36:36

VB基礎(chǔ)教程

2011-07-10 15:36:54

C++

2013-12-16 16:49:57

OpenMP

2013-04-17 10:46:54

面向?qū)ο?/a>

2009-09-27 14:12:12

面向?qū)ο笤O(shè)計(jì)單一職責(zé)

2017-08-30 17:59:20

Linux程序設(shè)計(jì)優(yōu)化措施

2013-12-12 16:30:20

Lua腳本語(yǔ)言

2012-06-07 10:11:01

面向?qū)ο?/a>設(shè)計(jì)原則Java

2011-04-11 10:44:53

對(duì)象編程C++

2011-08-25 14:43:55

LUA對(duì)象序列化

2010-12-23 11:18:16

程序員

2012-12-25 10:51:39

IBMdW

2020-10-10 11:03:24

面向?qū)ο?/a>編程語(yǔ)言開(kāi)發(fā)

2012-05-31 10:24:59

架構(gòu)

2015-03-16 11:14:26

Java程序員面向?qū)ο?/a>程序員

2022-04-01 10:27:04

面向?qū)ο?/a>串口協(xié)議代碼
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)