- UML2面向?qū)ο蠓治雠c設(shè)計(jì)(第2版)
- 譚火彬編著
- 2208字
- 2019-07-01 10:17:32
1.2 面向?qū)ο蠹夹g(shù)基礎(chǔ)
什么是面向?qū)ο蠹夹g(shù)?不同人從不同角度考慮就有不同的理解。可以認(rèn)為,面向?qū)ο蠹夹g(shù)是一種處理計(jì)算機(jī)軟件系統(tǒng)的觀點(diǎn);也可以說是一種系統(tǒng)分析和設(shè)計(jì)的思想,或是一種編程方法;又或者說是一組設(shè)計(jì)原則和模式。
面向?qū)ο蠹夹g(shù)是一系列指導(dǎo)軟件構(gòu)造的原則(如抽象、封裝、多態(tài)等),并通過語言、數(shù)據(jù)庫和其他工具支持這些原則。從定義可以看出,從本質(zhì)上講,對象技術(shù)是對一系列相關(guān)原則的應(yīng)用。有些書中采用“面向?qū)ο蠹夹g(shù)=類+對象+抽象+封裝+繼承+多態(tài)+消息……”這樣更直觀的形式定義面向?qū)ο蠹夹g(shù)。因此如果在應(yīng)用過程中沒有很好地利用這些思想,那么就不是面向?qū)ο蟆>拖竦?.1節(jié)中的Java實(shí)例,雖然定義了類,但是目標(biāo)不是為了抽象、不是為了封裝、不是為了多態(tài),這就不是面向?qū)ο蠹夹g(shù)。
1.2.1 面向?qū)ο蠹夹g(shù)的發(fā)展歷史
在掌握對象技術(shù)的應(yīng)用之前,有必要介紹一下面向?qū)ο蠹夹g(shù)的發(fā)展歷史,特別是幾個(gè)標(biāo)志性事件。
(1)Simula語言:面向?qū)ο蠹夹g(shù)最早起源于1962—1967年出現(xiàn)的Simula 67語言,該語言是由Ole-Johan Dahl和Kristen Nygaard在挪威奧斯陸的國家計(jì)算中心設(shè)計(jì)實(shí)現(xiàn)的,它是世界上公認(rèn)的第一種面向?qū)ο笳Z言,在該語言中第一次提出了類、對象、封裝等基本思想。
(2)Smalltalk語言:使面向?qū)ο蠹夹g(shù)進(jìn)入實(shí)用化的標(biāo)志則是1970年誕生的Smalltalk語言,它是由美國施樂公司的恪洛阿爾托研究中心(PARC)的Alan Kay設(shè)計(jì)實(shí)現(xiàn)的,是第一個(gè)成熟的面向?qū)ο笳Z言,在這個(gè)語言中提供了完整的面向?qū)ο蠹夹g(shù)解決方案(諸如類、對象、抽象、封裝、繼承、多態(tài)等)。該語言的很多思想到現(xiàn)在還被廣泛應(yīng)用(如MVC、重構(gòu)等)。
(3)C++語言:對象技術(shù)能夠發(fā)展到今天這個(gè)地步,離不開1983年誕生的C++語言。正是因?yàn)镃++語言的廣泛應(yīng)用,面向?qū)ο蠹夹g(shù)才真正從實(shí)驗(yàn)室階段走到了商業(yè)化階段,當(dāng)今流行的Java、C#等面向?qū)ο蟮木幊陶Z言都有C++語言的影子。
(4)UML:面向?qū)ο蠹夹g(shù)發(fā)展初期成果還主要體現(xiàn)在面向?qū)ο缶幊陶Z言的應(yīng)用領(lǐng)域。然而隨著軟件工程技術(shù)的日益成熟和受到重視,在20世紀(jì)80年代末、90年代初,面向?qū)ο蟮能浖こ桃驳玫搅搜杆侔l(fā)展。在此期間,各種面向?qū)ο蟮姆椒▽映霾桓F,這給普通用戶的使用帶來了很大的困擾。而1997年統(tǒng)一建模語言(Unified Modeling Language, UML)的產(chǎn)生則標(biāo)志著面向?qū)ο蠓椒▽W(xué)的統(tǒng)一,從而為面向?qū)ο蠹夹g(shù)的應(yīng)用掃清了最后一個(gè)障礙。此后,所有的軟件工程師都可以使用他們的通用語言——UML來表達(dá)面向?qū)ο蟮乃季S。
1.2.2 面向?qū)ο蠹夹g(shù)的優(yōu)勢
作為一種區(qū)別于傳統(tǒng)結(jié)構(gòu)化方法的開發(fā)技術(shù),面向?qū)ο蠹夹g(shù)被廣泛認(rèn)可和應(yīng)用是因?yàn)樗陨淼膬?yōu)勢,這些優(yōu)勢體現(xiàn)在很多方面。
1.溝通——在計(jì)算機(jī)中模擬現(xiàn)實(shí)世界的事和物
和傳統(tǒng)結(jié)構(gòu)化方法更側(cè)重于計(jì)算機(jī)表達(dá)問題的能力不同,面向?qū)ο蠹夹g(shù)更順應(yīng)人類思維習(xí)慣,讓軟件開發(fā)人員在解空間(計(jì)算機(jī)環(huán)境)中直接模擬問題空間(現(xiàn)實(shí)世界)中的對象及其行為。這一特點(diǎn)使得開發(fā)人員能夠更有效地在用戶環(huán)境和實(shí)現(xiàn)環(huán)境之間進(jìn)行轉(zhuǎn)換,從而能夠更加快速、有效地解決用戶問題。
下面的這段代碼采用最早的計(jì)算機(jī)語言(匯編語言)編寫而成,它的目標(biāo)是表達(dá)一件現(xiàn)實(shí)世界所發(fā)生的事情。然而,它到底要表達(dá)什么呢?對于普通用戶來說,這段代碼簡直是一段“天書”,恐怕只有專業(yè)的技術(shù)人員才能對它進(jìn)行有效的應(yīng)用和維護(hù)了。
PUSH EBX MOV EBX, EDX MOV EDX, EAX SHR EDX,1 6 DIV BX …
而同樣的這件事情,采用面向?qū)ο蠹夹g(shù)來描述就變得非常形象和生動(dòng)了。原來它是在描述一件動(dòng)物世界發(fā)生的故事,很形象且很容易理解。
AHare.Run; ALion.Catch(AHare); ALion.Kill(AHare); AHare.Dead; ALion.Eat; ALion.Happy;
2.穩(wěn)定——較小的需求變化不會(huì)導(dǎo)致系統(tǒng)結(jié)構(gòu)大的改變
在軟件開發(fā)過程中,需求的不穩(wěn)定性是影響軟件工程的一個(gè)非常重要的因素。社會(huì)在發(fā)展,用戶的要求也在提高,軟件開發(fā)人員不可能要求用戶不進(jìn)行任何需求變更。那么,如何面對這樣的變更呢?面向?qū)ο蠹夹g(shù)的核心思想就是用穩(wěn)定的元素將不穩(wěn)定的元素封裝起來,從而將變更的影響降到最低。在現(xiàn)實(shí)應(yīng)用中,功能是最易變的,數(shù)據(jù)是較易變的,而對象則是較穩(wěn)定的。為此,軟件開發(fā)人員就用較穩(wěn)定的對象將易變的功能和數(shù)據(jù)進(jìn)行封裝,從而保證了系統(tǒng)的穩(wěn)定性。這好比一枚雞蛋,因?yàn)橛辛说皻み@層封裝,蛋清(功能)和蛋黃(數(shù)據(jù))才能夠穩(wěn)定存在。
3.復(fù)用——提高質(zhì)量,降低成本
隨著計(jì)算機(jī)應(yīng)用的日益廣泛,軟件規(guī)模越來越龐大,開發(fā)人員如何能夠快速、有效地構(gòu)造軟件呢?作為一種智力勞動(dòng),構(gòu)造軟件的過程并不是簡單的加減法問題。一個(gè)人需要10個(gè)月時(shí)間才能夠完成的工作,并不等同于10個(gè)人用一個(gè)月時(shí)間就完成了,此種情況下必須采用有效的方法才可能在一個(gè)月內(nèi)完成。Borland公司創(chuàng)始人Philippe Kahn曾經(jīng)說過:“軟件開發(fā)組越大,組中每個(gè)成員的生產(chǎn)率就越低”,他還提出了這樣一個(gè)公式:

該公式的含義:一個(gè)人一年單獨(dú)能夠編寫15000行有效代碼(Ln),但隨著項(xiàng)目組的人數(shù)n的不斷增加,其有效代碼的數(shù)量會(huì)下降。由此可見,構(gòu)造大型的軟件不能僅靠堆人,而需要采取有效的方法——復(fù)用。LOC是Line of Code的縮寫,即軟件規(guī)模性代碼行。
面向?qū)ο蠹夹g(shù)通過封裝、繼承、聚合等手段,提供了各種不同層次的復(fù)用(如基于類庫、框架等的代碼層復(fù)用,基于抽象、多態(tài)、模式等設(shè)計(jì)層的復(fù)用),開發(fā)人員應(yīng)該可以切身體會(huì)到面向?qū)ο髲?fù)用所帶來的好處。例如Java開發(fā)者通過調(diào)用龐大的Java類庫,可以快速實(shí)現(xiàn)很多業(yè)務(wù)功能,而不需要進(jìn)行太多的編碼。這種基于復(fù)用的開發(fā)方法極大地提高了軟件的開發(fā)效率,也大大降低了軟件開發(fā)的難度。
除了上面所提到的3個(gè)優(yōu)勢外,面向?qū)ο蠹夹g(shù)還有其他優(yōu)勢,如改善軟件結(jié)構(gòu)、提高軟件靈活性、增加可擴(kuò)展性、支持增量式開發(fā)、支持大型軟件開發(fā)等。這些優(yōu)勢使面向?qū)ο蠹夹g(shù)得到了更廣泛地應(yīng)用。
- Practical Data Analysis Cookbook
- R語言數(shù)據(jù)分析從入門到精通
- CMDB分步構(gòu)建指南
- 信息可視化的藝術(shù):信息可視化在英國
- 編程卓越之道(卷3):軟件工程化
- Java編程指南:基礎(chǔ)知識、類庫應(yīng)用及案例設(shè)計(jì)
- Cassandra Design Patterns(Second Edition)
- Animate CC二維動(dòng)畫設(shè)計(jì)與制作(微課版)
- Ray分布式機(jī)器學(xué)習(xí):利用Ray進(jìn)行大模型的數(shù)據(jù)處理、訓(xùn)練、推理和部署
- SharePoint Development with the SharePoint Framework
- Java程序設(shè)計(jì)
- R Deep Learning Cookbook
- R語言與網(wǎng)絡(luò)輿情處理
- 零基礎(chǔ)輕松學(xué)C++:青少年趣味編程(全彩版)
- IBM RUP參考與認(rèn)證指南