




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第一章 從過程抽象到數(shù)據(jù)抽象1.3 面向對象分析和設計 主要內容面向對象建模對象模型UML建模技術面向對象分析面向對象設計面向對象實現(xiàn)1.3.1 面向對象建模 在創(chuàng)建系統(tǒng)之前必須對問題有一個透徹的了解。為了更好的理解問題和描述問題,人們常常采用“建立問題模型”技術。如:建造一座大廈(圖紙),拍電影(劇本) 模型由一組圖示符號和組織這些符號的規(guī)則組成,利用它們來定義和描述問題域中的術語和概念。 模型是一種思考工具,利用這種工具可以把知識規(guī)范地無歧義地表示出來。1. 建模的目的: (1)模型幫助我們將系統(tǒng)可視化,可以更好地理解系統(tǒng)。 (2)模型可以讓我們直觀、詳細描述系統(tǒng)的結構和行為,并利用它和同
2、事容易溝通。 (3)模型提供了指導我們創(chuàng)建系統(tǒng)的模板,我們可以用它為使用系統(tǒng)的人提供幫助。(4)模型對我們所做的決策進行文檔化。系統(tǒng)越大越需要建立問題模型。為了開發(fā)復雜的軟件系統(tǒng),系統(tǒng)分析員應該抽象出目標系統(tǒng)的特性,使用精確的表示方法構造系統(tǒng)的模型,并在設計過程中逐漸把和實現(xiàn)有關的細節(jié)加進模型中,直至最終用程序實現(xiàn)模型。2.建立問題模型方法從算法的角度建立問題模型:所有的問題都用過程/函數(shù)作為主要構造塊面向對象的建模:所有的問題都用對象/類作為主要構造塊面向對象的建模的方法很多:Rumbaugh-OMTBooch Yourdon - OOA&DJacobson - OOSEMartin - O
3、OD每種方法都有自己的建模內容和圖形化工具。目前最好最流行的圖形化工具是UML。UML的軟件:Rational Rose; Visio OMT建模OMT是著名的對象模型化技術OMT。OMT認為用面向對象方法開發(fā)軟件,通常需要建立三種形式的模型,它們分別是:1.描述系統(tǒng)數(shù)據(jù)結構的對象模型(基本、核心)2.描述系統(tǒng)控制結構的動態(tài)模型3.描述系統(tǒng)功能的功能模型這三個模型從3個不同但又密切相關的角度模擬目標系統(tǒng)。一個典型的軟件系統(tǒng)組合了上述三方面內容:它使用數(shù)據(jù)結構(對象模型),執(zhí)行操作(動態(tài)模型),并且完成數(shù)據(jù)值的變化(功能模型)。分析:對象模型是三個模型中最關鍵的一個模型。它的作用是描述系統(tǒng)的靜態(tài)
4、結構,包括構成系統(tǒng)的類和對象,它們的屬性和操作,及它們之間的關系。(定義“對誰做”)動態(tài)模型著重于系統(tǒng)的控制邏輯。要想對一個系統(tǒng)了解得比較清楚,還應當考察在任何時刻對象及其關系的改變。系統(tǒng)的這些涉及時序和改變狀況用動態(tài)模型來描述。(定義“何時做”)功能模型著重于系統(tǒng)內部數(shù)據(jù)的傳送和處理。功能模型表明,通過計算,從輸入數(shù)據(jù)能得到什么樣的輸出數(shù)據(jù),不考慮參加計算的數(shù)據(jù)按什么時序執(zhí)行。(定義“做什么”)最核心的模型-對象模型 面向對象方法強調圍繞對象而不是圍繞功能來構造系統(tǒng)。對于大系統(tǒng):3個模型必不可少.對于小系統(tǒng):對象模型必不可少。對象模型是上述三種模型中最重要、最基本、最核心的模型。 對象模型表
5、示靜態(tài)的、結構化的系統(tǒng)的“數(shù)據(jù)”性質。它是對模擬客觀世界實體的對象以及對象彼此間的關系的映射,描述了系統(tǒng)的靜態(tài)結構。 OMT對象模型化技術把分析時收集的信息構造在三類模型中,即對象模型、動態(tài)模型和功能模型。動態(tài)模型對象模型功能模型 這個模型化的過程是一個迭代過程。通過不斷更新、細化,直到切合系統(tǒng)的真正需求為止。 為了建立系統(tǒng)模型,需要定義一組圖形符號,并且規(guī)定一組組織這些符號以表示特定語義的規(guī)則。如對象模型,需要包含下列符號:表示類的符號(應該既能表示屬性又能表示服務);表示對象(類實例)的符號;表示繼承關系的符號;表示類和(或)對象 間其他關系的符號。統(tǒng)一建模語言(UML)為建立系統(tǒng)模型提供
6、了一個圖形化的表示手段UML建模技術1. UML(Unified Modeling Language, 統(tǒng)一建模語言) UML是軟件和系統(tǒng)開發(fā)的標準建模語言。它主要以圖形的方式對系統(tǒng)進行分析、設計。 UML是在多種面向對象分析與設計方法相互融合的基礎上形成的,是一種專用于系統(tǒng)建模的語言。它為開發(fā)人員與客戶之間,以及開發(fā)人員之間的溝通與理解架起了“橋梁”。2.UML系統(tǒng)視圖UML 是用來描述模型的,它用模型來描述系統(tǒng)的結構、或靜態(tài)特征、以及行為或動態(tài)特征它從不同的視角為系統(tǒng)的架構建模,形成系統(tǒng)的不同視圖(view)每一種UML 的視圖都是由一個或多個圖(diagram )組成的,一個圖就是系統(tǒng)架
7、構在某個側面的表示,它與其它圖是一致的,所有的圖一起組成了系統(tǒng)的完整視圖。UML 提供了九種不同的圖描述系統(tǒng)模型??梢苑殖蓛纱箢悾阂活愂庆o態(tài)圖。包括用例圖、類圖、對象圖、組件圖、配置圖另一類是動態(tài)圖。包括序列圖、協(xié)作圖、狀態(tài)圖和活動圖UML圖(preview)1) 用例圖2) 時序圖:打印3) 時序圖:打電話4) 協(xié)同圖:打印5) 狀態(tài)圖:電梯6) 封包7) 活動圖:磁盤8) 構件分布圖9) 構件圖的組合10) 配置圖:主機與外圍設備11)類圖類圖用于表示類的存在和類與類之間的相互關系,是從系統(tǒng)構成的角度來描述正在開發(fā)的系統(tǒng)。類的表示:類的名稱屬性屬性 :數(shù)據(jù)類型屬性 :數(shù)據(jù)類型 = 初值操作
8、操作(參數(shù)表):結果類型類圖12)對象圖類圖表示類和類與類之間的關系,對象圖則表示在某一時刻這些類的具體實例和這些實例之間的具體連接關系。由于對象是類的實例,所以UML 對象圖中的概念與類圖中的概念完全一致。對象圖可以看作類圖的示例,幫助人們理解一個比較復雜的類圖。對象圖也可用于顯示類圖中的對象在某一點的連接關系。對象的圖示方式與類的圖示方式幾乎是一樣的,主要差別在于對象的名字下面要加下劃線。對象名有下列三種表示格式:13)關系類圖由類和它們之間的關系,組成類與類之間通常有四種關系:泛化關系(Generalization)關聯(lián)關系(Association)聚合關系(Aggregation)合成
9、關系(Composition)依賴關系(Dependency)其中,聚合關系(Aggregation),合成關系(Composition)屬于關聯(lián)關系(Association)。泛化關系表現(xiàn)為繼承或實現(xiàn)關系(is a),關聯(lián)關系表現(xiàn)為變量(has a ),依賴關系表現(xiàn)為函數(shù)中的參數(shù)(use a)。泛化關系:表示為類與類之間的繼承關系,接口與接口之間的繼承,類對接口的實現(xiàn)關系。表示方法: 用一個空心箭頭實線,箭頭指向父類?;蚩招募^虛線,如果父類是接口。關聯(lián)關系:類與類之間的聯(lián)接,它使一個類知道另一個類的屬性和方法。表示方法:用 實線箭頭, 箭頭指向被使用的類。在示范代碼中,Employee可以
10、有0個或更多的TimeCard對象。但是,每個TimeCard只從屬于單獨一個Employee。聚合關系:是關聯(lián)關系的一種,是強的關聯(lián)關系。聚合關系是整體和個體的關系。關聯(lián)關系的兩個類處于同一層次上,啊聚合關系兩個類處于不同的層次,一個是整體,一個是部分。表示方法:空心菱形實線箭頭,箭頭指向部分。合成關系:是關聯(lián)關系的一種,是比聚合關系強的關系。它要求普通的聚合關系中代表整體的對象負責代表部分的對象的生命周期,合成關系不能共享。表示方法:實心菱形實線箭頭,Employee和TimeCard的關系或許更適合表示成“合成”,而不是表示成“關聯(lián)”。 依賴關系:是類與類之間的連接,表示一個類依賴于另一
11、個類的定義。例如如果A依賴于B,則B體現(xiàn)為局部變量,方法的參數(shù)、或靜態(tài)方法的調用。表示方法:虛線箭頭UML開發(fā)工具IBM Rational RoseMicrosoft Visio-UML 模型圖Borland TogetherJude (Java and UML Developers Environment),一個小巧實用的UML建模軟件,是一個中日合作采用XP開發(fā)方式純JAVA開發(fā)的軟件,也可以說是半個國產軟件EclipseUMLRoseStarUML:一款開放源碼的UML開發(fā)工具,是由韓國公司主導開發(fā)出來的產品。1.3.2 面向對象分析(OOA)1. 基本內涵 面向對象的分析就是運用面向對
12、象方法進行系統(tǒng)分析,抽取和整理用戶需求并建立問題域精確模型的過程。 它強調運用面向對象方法進行分析,用面向對象的概念和表示法表達、分析結果。2. 基本任務OOA分析工作主要包含3項內容:理解用戶需求;表達用戶需求;驗證用戶需求。3. 基本步驟 面向對象分析工作大體上按照下列順序進行:第一步,尋找類&對象;第二步,確定對象之間的關聯(lián);第三步,定義對象的屬性;第四步,定義對象的服務。 事實上,分析工作不可能嚴格地按照預定順序進行,系統(tǒng)的模型往往需要反復構造多遍才能建成。 通常,先構造出模型的子集,然后再逐漸擴充,直到完全、充分地理解整個問題,才能最終把模型建立起來。1) 確定類&對象步驟:找出侯選
13、的類&對象。 對象是對問題域中有意義的事物的抽象,它們既可能是物理實體,也可能是抽象概念。 通常,將需求陳述中的名詞 或名詞短語作為類&對象的候選者。篩選出正確的類&對象。 找出候選的類&對象之后,還應該嚴格考察每個候選者,從中去掉不正確的或不必要的。 刪除的依據(jù)如下:冗余的:兩個類名表示了相同的信息,應該保留較全面的類&對象。無關的:與目標系統(tǒng)無關的類&對象?;\統(tǒng)的:用精確的代替模糊、籠統(tǒng)的類&對象。無關的屬性:去掉類&對象中無關的屬性。操作:通常用動詞定義類中的操作。實現(xiàn):在系統(tǒng)分析階段應該少考慮或不考慮怎樣實現(xiàn)目標系統(tǒng)。2) 確定關聯(lián)在需求陳述中使用的描述性動詞或動詞詞組,通常表示關聯(lián)關
14、系。因此,在初步確定關聯(lián)時,大多數(shù)關聯(lián)可以通過直接提取需求陳述中的動詞詞組而得出。分析員還應該與用戶及領域專家討論問題域實體間的相互依賴、相互作用關系,根據(jù)領域知識再進一步補充一些關聯(lián)。最后,還需對初步確定的關聯(lián)進行進一步篩選,以去掉不正確的或不必要的關聯(lián)。三個或三個以上對象之間的關聯(lián),大多可以分解為二元關聯(lián)。3) 確定屬性 分析并確定每個對象有哪些特性。確定屬性的過程包括分析和選擇兩個步驟。通常,在需求陳述中用名詞詞組表示屬性。應該僅考慮與具體應用直接相關的屬性,不必考慮那些超出所要解決的問題范圍的屬性。4) 確定服務分析并確定每個對象有哪些對屬性的操作。在確定類中應該有的服務時,既要考慮該
15、類實體的常規(guī)行為,又要考慮為完成本系統(tǒng)功能所需要提供的服務。5) 識別繼承關系 確定了類中應該定義的屬性和服務之后,就可以利用繼承機制共享公共性質,并對系統(tǒng)中的類加以層次化組織。 一般說來,可以使用兩種方式建立繼承關系: 自底向上:抽象出現(xiàn)有類的共同性質泛化出父類,這個過程實質上模擬了人類歸納思維過程。自頂向下:把現(xiàn)有類細化成更具體的子類,這模似了人類的演繹思維過程。 關系層特征層對象層基本模型(類圖)交互圖主題圖詳 細 說 明給出所有與問題域和系統(tǒng)責任有關的對象,用對象類表示定義每個對象類的屬性與服務通過結構與連接描述對象之間的關系對模型中的所有元素進行詳細說明對關系密切的類打包,幫助理解類
16、圖一幅交互圖表現(xiàn)完成某一項特定功能的一組對象之間的詳細交互。每一項功能用一個 use case描述OOA模型(based on UML):1.3.3 面向對象設計(OOD) 面向對象分析是提取和整理用戶需求,并建立問題域精確模型的過程。面向對象設計則是把分析階段得到的需求轉變成符合成本和質量要求的系統(tǒng)實現(xiàn)方案的過程。 從面向對象分析到面向對象設計,是一個逐漸擴充模型的過程?;蛘哒f,面向對象設計就是用面向對象觀點建立求解域模型的過程。1. 發(fā)展過程_I1) 早期的OOD(80年代至90年代初)1982 年G. Booch發(fā)表“Object-Oriented Design” ,首次稱“面向對象的設
17、計”。1986 年發(fā)表“Object-Oriented Development”,較完整地闡述了OOD思想。 兩個術語都用OOD作為縮寫,內容上也沒有根本區(qū)別。 1983年R. J. Abbott提出正文分析方法,用規(guī)范的英語描述對一個問題的解釋,然后從描述中提取對象及其特征。例:名詞對象,動詞操作。被后來的許多OOD方法所采用。1. 發(fā)展過程_II1986年后,相繼出現(xiàn)了一批(早期的)OOD方法。如:Booch86Object-Oriented Development(面向對象的開發(fā))GOODGeneral Object-Oriented Development(通用面向對象的開發(fā))HOOD
18、Hierarchical Object-Oriented Design(層次式面向對象的設計)OOSDObject-Oriented Structured Design(面向對象的結構設計)1. 發(fā)展過程_III2) 現(xiàn)今的OOD(90年代以后)特點:以面向對象的分析為基礎,一般不依賴結構化分析。與相應的OOA方法共同構成一種OOA&D方法體系。OOA和OOD采用一致的概念與原則,但屬于軟件生命周期的不同階段,有不同的目標及策略。較全面地體現(xiàn)面向對象方法的概念與原則。大多數(shù)方法獨立于編程語言,通過面向對象的分析與設計所得到的系統(tǒng)模型可以由不同的編程語言實現(xiàn)。2. 定義 面向對象的設計(OOD)
19、就在是OOA模型基礎上運用面向對象方法進行系統(tǒng)設計,目標是產生一個符合具體實現(xiàn)條件的OOD模型。OOD與OOA、OOP關系: OOD是OO軟件工程中承前啟后的中間環(huán)節(jié)往前OOA(全部用OO概念建模)往后OOP(用OOPL支持的OO概念編程) OOD使用與OOA和OOP一致的概念建立完整的、可實現(xiàn)的系統(tǒng)設計模型。OOA與OOD的目標、內容OOA主要內容是研究問題域和用戶需求,運用面向對象的觀點和原則發(fā)現(xiàn)問題域中與系統(tǒng)責任有關的對象,以及對象的特征和相互關系。目標是建立一個直接映射問題域,符合用戶需求的OOA模型。OOD主要內容是以OOA模型為基礎,按照實現(xiàn)的要求進行設計決策,包括全局性的決策和局
20、部細節(jié)的設計。目標是產生一個滿足用戶需求,并且完全可實現(xiàn)的OOD模型。全局性設計決策:體系結構、分布方案、并發(fā)控制、人機交互、數(shù)據(jù)管理等。OOD方法應支持用戶以OO概念表達對這些問題的設計。局部細節(jié)的設計:對每個對象類的每個屬性和每個服務給出詳細的定義。3. 設計內容 通常,一個實用的軟件系統(tǒng)在邏輯上由問題域子系統(tǒng)、人機交互子系統(tǒng)、任務管理子系統(tǒng)和數(shù)據(jù)管理子系統(tǒng)等四大部分組成。針對上述四個部分,在OOD中進行以下四個相應的活動:設計問題域部分;設計人機交互部分的;設計任務管理部分;設計數(shù)據(jù)管理部分。4. 設計準則_I模塊化 面向對象軟件開發(fā)模式,很自然的支持了把系統(tǒng)分解成模塊的設計原則:對象就
21、是模塊。抽象 面向對象方法不僅支持過程抽象,而且支持數(shù)據(jù)抽象。類實際上是一種抽象數(shù)據(jù)數(shù)據(jù)類型。信息隱藏 在面向對象方法中,信息隱藏通過對象的封裝性實現(xiàn):類結構分離了接口與實現(xiàn),從而支持了信息隱藏。弱耦合 在面向對象方法中,耦合主要指不同對象之間相互關聯(lián)的緊密程度。 一般說來,對象之間的耦合可分為以下兩類:交互耦合:對象之間的耦合通過消息來實現(xiàn),則這種耦合就是交互耦合。繼承耦合:繼承是一般化類與特殊類之間耦合的一種形式。 在面向對象設計時,應盡量降低交互耦合的程度,提高繼承耦合程度。4. 設計準則_II 為使交互耦合盡可能松散,應該遵守下述準則:1) 盡量降低消息連接的復雜程度。即減少消息中包含
22、的參數(shù)個數(shù),降低參數(shù)的復雜程度。2) 減少對象發(fā)送/接收的消息數(shù)。4. 設計準則_III5) 強內聚 在OOD中存在以下3種內聚:服務內聚:一個服務應該完成一個且僅完成一個功能。類內聚:一個類應該只有一個用途。一般特殊內聚:設計出的一般特殊結構應該是對相應領域知識的正確抽取,應該符合多數(shù)人的概念。 在設計時應該力求做到高內聚。4. 設計準則_IV可重用 重用有兩方面的含義:一是盡量使用已有的類(包括開發(fā)環(huán)境提供的類庫,以及以往開發(fā)類似系統(tǒng)時創(chuàng)建的類);二是如果確實需要創(chuàng)建新類,則在設計這些新類的協(xié)議時,應該考慮將來的重復使用性。OOD模型從兩個側面來描述人機交互部分數(shù)據(jù)接口部分控制接口部分問題
23、域部分從一個側面觀察OOD模型包括:一個核心部分+幾個外圍部分交 互 圖主 題 圖類 圖詳 細 說 明從另一側面觀察OOD模型采用OOA的概念及 模型組織方式1.3.3 面向對象實現(xiàn)1. 基本任務把面向對象設計的結果翻譯成用某種面 向對象程序語言書寫的面向對象程序。測試和調試編寫出的面向對象程序。 程序的質量主要由設計的質量決定,應該將大量的時間花在系統(tǒng)分析與設計上,但是所選用的程序語言的特點對程序質量也有重要影響。2. 面向對象語言的選擇面向對象語言可以分為兩類:純面向對象語言。例如:Java,C#,Smalltalk, Eiffel等。混合型面向對象語言(即在過程語言的基礎上增加面向對象機
24、制)例如:C+。選擇面向對象語言或工具的原則計算模式:C/S或B/S運行平臺:PC/嵌入式系統(tǒng)/SmartDevice/otherOS平臺:Windows/Linux/嵌入式OS/other時間、空間需求可參考的資源語言或工具的功能、類庫、配置、發(fā)布語言或工具未來的發(fā)展前景開發(fā)人員的基礎項目的未來前景等等 一個面向對象的C+程序實例1. 需求陳述(一個簡單圖形程序的需求): 在顯示器熒光屏上圓心坐標為(100,100)的位置上,畫一個半徑為40的圓,在圓心坐標為(200,300)的位置上,畫一個半徑為20的圓,在圓心坐標為(400,150)的位置上,畫一條弧,弧的起始角度為30,結束角度為12
25、0,半徑為50。2. 面向對象分析確定對象 使用“語法分析”方法,在需求陳述中包含的名詞或名詞短語是對象的候選者,它們有下列一些: 顯示器熒光屏,圓心坐標,位置,半徑,圓,弧,起始角度,結束角度。分析:“顯示器熒光屏”是一種輸出設備,是運行程序的物質基礎(硬件平臺),應該從候選對象中刪去。“圓心坐標”和“半徑”實質上是圓和弧的基本屬性,并不需要獨立存在,因此也應該從候選者中刪去。“位置”實際上是指圓心的位置,也就是圓心坐標,沒必要重復列出?!捌鹗冀嵌取焙汀敖Y束角度”實質上是弧的屬性,也應該從候選者中刪去。結論: 最后得出的是圓(Circle)和弧(Arc)兩類對象。圓的兩個基本屬性是圓心坐標和
26、半徑。弧的基本屬性有圓心坐標,半徑,起始角度和結束角度。分析: 由于不可能在需求陳述中找到所有屬性,還必須借助領域知識和常識,才能分析得出所需要的全部屬性。因此,圓和弧都應該再增加一個屬性可見性。 確定屬性 確定服務 在分析階段可以認為,每個屬性都是可以訪問的。所謂可以訪問是指提供了訪問對象屬性的對外接口。(由對象主動地向外界提供服務)分析: 由這個程序應完成的功能可知,圓和弧都應該提供在熒光屏上“畫自己”的服務。相應地也應該提供“隱藏自己”這樣一個服務。 結論: 圓和弧分別有各自的屬性和服務,如下圖所示。圓心坐標半徑可見性讀/寫圓心坐標讀/寫半徑讀/寫可見性顯示隱藏圓圓心坐標半徑起始角度結束
27、角度可見性讀/寫圓心坐標讀/寫半徑讀/寫起始角度讀/寫結束角度讀/寫可見性顯示隱藏弧3. 面向對象設計_I建立類等級 面向對象程序的一個突出優(yōu)點來源于繼承性。應該盡量抽取出相似類的公共屬性和公共服務,以建立這些相似類的父類,并在類等級的適當層次中正確地定義各個屬性和服務。簡單圖形程序的對象模型如下圖(為簡明起見,圖中沒有列出讀寫屬性值的常規(guī)服務)。位置坐標點可見性顯示隱藏圓半徑顯示隱藏弧起始角度結束角度顯示隱藏3. 面向對象設計_II定義屬性 所謂定義屬性就是要確定每個屬性的數(shù)據(jù)類型和數(shù)據(jù)結構,同時還要確定每個屬性的訪問權限(通常被定義在保護部分或私有部分)。定義服務 實現(xiàn)“顯示”服務的算法概
28、括來說就是,把“可見性”屬性設置為true,然后調用相應的庫函數(shù)用當前的前景顏色畫出所要的圖形。4. 面向對象實現(xiàn)_I圓類的定義class Circle :public Point protected: int Radius; public: Circle (int InitX,int InitY,int InitRadius); void Show( ); void Hide( ); int GetRadius( );Circle:Circle(int InitX,int InitY, int InitRadius):Point(InitX,InitY)Radius = InitRadius
29、;void Circle:Show()Visible = true;circle(X,Y,Radius);4. 面向對象實現(xiàn)_II4. 面向對象實現(xiàn)_IIIvoid Circle:Hide()int TempColor;TempColor = getcolor();setcolor(getbkcolor();Visible = false;circle(X,Y,Radius);setcolor(Tempcolor);int Circle:GetRadius()return Radius; 5. 小結 用面向對象程序設計方法,解決一個簡單的實際工程的基本步驟如下:1) 面向對象分析: 通過對用戶
30、需求的分析,合理地提取問題域中所涉及到類-&-對象。包括:這些類-&-對象中應該包括哪些屬性和方法。2) 面向對象設計: 對分析中得到的準確結果,設計出實現(xiàn)程序的方案。包括:建立類之間的繼承關系:根據(jù)對系統(tǒng)中共性和個性的劃分建立類等級即類之間的繼承關系(提取公共的屬性和服務以建立父類)定義屬性:確定屬性的數(shù)據(jù)類型及訪問權限。定義服務:確定實現(xiàn)服務的準確算法以及清晰的接口。3)面向對象實現(xiàn):選擇一種合適的編程語言,實現(xiàn)上述設計。1.3.4 Form C - C+C+是C語言的超集,增加了面向對象部分,是OOP的第一個大眾化版本。C+語言具有下列主要特點: C+完全兼容C。大多數(shù)的C語言代碼略作修
31、改或不修改就可在C+的集成環(huán)境下運行。 C+作為一種面向對象的程序設計語言。 用C+設計的程序擴充性強。C+在面向對象的程序設計語言方面獲得主導地位,很大程度上是由于它繼承了C語言的主要特征,再加上它加強了數(shù)據(jù)類型的檢查機制,引入了類的概念等。從C+的名字可以看出它是C的超集。C+既可用于面向過程的結構化程序設計,又可用于面向對象的程序設計,是一種功能強大的混合型的程序設計語言。1 C+程序的基本框架/ This is a simple C+ program.#include using namespace std;int main()coutThis is a simple C+ progr
32、am.endl; return 0;2 C+數(shù)據(jù)類型 C+的基本數(shù)據(jù)類型有整型(int)、字符型(char)、浮點型(float、double)、布爾型(bool)、空類型(void)等類型。void為無值型 : void show(); int show (void)C+的構造數(shù)據(jù)類型是由基本數(shù)據(jù)類型構造而成的。C+語言中的構造數(shù)據(jù)類型有:數(shù)組、指針、枚舉、引用、結構體、聯(lián)合、類。2.1指針變量的指針就是變量的地址。存放變量地址的變量是指針變量,用來指向另一個變量。為了表示指針變量和它所指向的變量之間的聯(lián)系,在程序中用“*”符號表示“指向”。符號“*”稱為指針運算符。定義指針變量的一般形式為
33、:基類型 * 指針變量名例如:int *i_pointer;float *f_pointer;在使用指針之前,一定要先使指針有明確的指向。那么,怎樣使一個指針變量指向另一個變量呢?可以使用如下的賦值語句。例如:int * i_pointer1,* i_pointer2;int i,j;i_pointer1=&i;i_pointer2=&j;其中,“&”是地址運算符,&i就是取變量i在內存中的地址。指針變量的引用在定義了指針變量并明確了它的指向后,就可以使用指針變量了。利用指針變量,提供了一種對變量的間接訪問形式。對指針變量的引用形式為:*指針變量其含義是指針變量所指向的值。指針變量作函數(shù)的參數(shù)
34、函數(shù)的參數(shù)不僅可以是整型、實型、字符型等數(shù)據(jù),還可以是指針類型。它的作用是將個變量的地址傳送到另一個函數(shù)中。由于被調用函數(shù)中獲得了所傳遞變量的地址,因此在該地址空間的數(shù)據(jù)當函數(shù)調用結束后被物理地保留下來。2.2引用引用是C+語言中對一個變量或常量標識符起的別名。例如,已經定義了一個變量val,然后再建立一個對這個變量的引用rval,就為變量val起了一個別名,val和rval就是指的同一個變量,它們的使用方式也完全一樣。說明一個引用的方式如下:int val; / 定義vaL是整型變量int &rval= val; /聲明rvaL是val的引用說明一個引用時,在引用標識符的前面加上“&”,后面
35、跟上它所引用的標識符的名字。當編譯程序看到時,就不為其后面的標識符分配內存空間,而只是簡單地將它所引用的那個標識符所具有的內存空間賦給它。 引用的作用:1-引用作函數(shù)參數(shù)引用在一般場合是沒有什么用途的,單純?yōu)橐粋€變量取個別名也沒有什么意義。引用最大的用途是作為函數(shù)的參數(shù)或返回值類型,從而擴充函數(shù)傳遞數(shù)據(jù)的功能。我們知道,引用是它所引用的變量的一個別名,它們實際上是同一回事。因此,當函數(shù)的形參是引用類型時,它實際上是對實參所代表的變量的引用,它自己不具有獨立的內存空間。這種實參傳遞給形參的方式稱為按引用傳遞。例6-16 利用“引用形參”實現(xiàn)兩個變量的值的互換2-引用返回值返回引用值的函數(shù)在一般情
36、形下并不多見,但是如果需要讓函數(shù)調用作為左值時,就需要將函數(shù)返回值設計為是引用類型。函數(shù)的返回值為引用類型表示該函數(shù)的返回值是一個內存變量的別名。可以將函數(shù)調用作為一個變量來使用,可以為其賦值。例6-18 定義了一個求兩個數(shù)中最小值的函數(shù),函數(shù)的參數(shù)是兩個整型變量返回值是對這兩個數(shù)中值較小的那個變量的引用。2.3常變量(const變量)C+中使用const修飾符來定義常量。const可以與指針一起使用,它們的組合情況較復雜,可歸納為三種:指向常量的指針、常指針和指向常量的常指針。1指向常量的指針指向常量的指針是指一個指向常量的指針變量。在指針定義語句的類型前加const修飾符,表示指向的對象是
37、常量。例如: const char *namechen; / 聲明指向常量的指針這個語句的含義為:聲明一個名為name的指針變量,它指向一個字符型常量,初始化name為指向字符串“chen”。2常指針常指針是指把指針本身是聲明為常量,而不是將它指向的對象聲明為常量。在指針定義語句的指針名前加const修飾符,表示指針本身是常量。例如: char * const name=chen; / 常指針這個語句的含義為:聲明一個名為name的指針常量,該指針是指向字符型數(shù)據(jù)的常指針,用字符串常量“chen”的地址初始化該常指針。3指向常量的常指針指向常量的常指針是指這個指針本身不能改變,它所指向的值也不
38、能改變。要聲明個指向常量的常指針,二者都要聲明為const,并且必須在定義時進行初始化。例如: const char * const namechen; /指向常量的常指針這個語句的含義是:聲明了一個名為name的指針常量,它是一個指向字符型常量的常指針,用字符串常量chen的地址初始化該指針。 2.4定義變量初值定義變量的一般形式為:變量類型 變量名表列;變量賦初值C+語言允許在定義變量的同時使變量初始化。如:int a=1; / 指定 a為整型變量,初值為 1float pi=3.1415; / 指定 pi為單精度浮點型變量,初值為 3.1415也可以使被定義的變量的一部分賦初值。如int
39、 a,b,c1; / 表示指定a、b、c為整型變量,只對c初始化,c的初值為1如果對幾個變量賦予同一個初值,不能寫成int a=b=c=1; 而應寫成int a=1,b=1,c=1;可在程序中隨意定義變量char *name(“Smith”)for(int i(0); i6; i+);2.5 C+的運算符new 動態(tài)內存分配delete 回收new分配的內存動態(tài):域作用符: 對數(shù)據(jù)成員和成員函數(shù)的限定3. c+中的new/delete取代 malloc/free new/delete有什么好處?malloc/free只是對內存進行分配和釋放; new/delete還負責完成了創(chuàng)建和銷毀對象的任
40、務。另外,new的安全性要高一些,因為new返回的就是一個所創(chuàng)建的對象的指針,對于malloc來說返回的則是void*,還要進行強制類型轉換,這是一個危險的漏洞。最后,我們可以對new/delete重載,使內存分配按照我們的意愿進行,這樣更具有靈活性,malloc則不行。new的使用:type * p = new typetype * p = new type(初值)type * p = new type數(shù)組大小int *p=new int;int *p=new int(50);int *p=new int10;std:string *stringPtr1 = new std:string;
41、std:string *stringPtr2 = new std:string100; delete的使用:delete stringPtr1; / 刪除一個對象 delete stringPtr2; / 刪除一個對象數(shù)組NOTEnew創(chuàng)建的內存空間必須由delete回收new創(chuàng)建內存空間不成功返回NULL指針(0)int *p=new int10;if (p=0) cout “Run out of memory”c+標準庫與Namespace C+標準庫很大:在C+標準中,關于標準庫的規(guī)格說明占了密密麻麻300多頁,這還不包括標準C庫,后者只是 作為參考包含在C+庫中。C+庫并非提供了一切(
42、很明顯的是,沒有提供并發(fā)和圖形用戶接口的支持),但確實提供了很多。幾乎任何事你都可以求助于它。標準庫組織因為標準庫中東西如此之多,你所選擇的類名或函數(shù)名就很有可能和標準庫中的某個名字相同。為了避免這種情況所造成的名字沖突,實際上標準庫中的一切都被放在名字空間std中。 具體組織情況:1-文件名稱:早期C+標準庫放在,等頭文件中后來的C+標準庫引入namespace:為包裝在std的那部分標準庫創(chuàng)建新的頭文件名。生成新頭文件的方法僅僅是將現(xiàn)有C+頭文件名中的 .h 去掉。所以變成了,變成了,等等。對于C頭文件,采用同樣的方法,但在每個名字前還要添加一個c。所以C的變成了,變成了,等等。實際來說,下面是C+頭文件的現(xiàn)狀: 舊的C+頭文件名如將會繼續(xù)被支持,盡管它們不在官方標準中。這些頭文件的內容不在名字空間std中。 新的C+頭文件如包含的基本功能和對應的舊頭文件相同,但頭文件的內容在名字空間std中。(在標準化的過程中,庫中有些部分的細節(jié)被修改了,所以舊頭文件和新頭文件中的實體不一定完全對應。) 標準C頭文件如繼續(xù)被支持。頭文件的內容不在std中。 具有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年學雷鋒演講稿范文(17篇)
- 按揭中房屋買賣合同范本(19篇)
- 助理上半年工作總結和下半年計劃(4篇)
- 公司法務工作總結范文(4篇)
- 初中校長個人工作述職報告范文(3篇)
- 幼兒園老師代表發(fā)言稿(15篇)
- 苗木質量檢測協(xié)議
- 幼兒園5月工作計劃(20篇)
- 模具廠鉗工承包合同協(xié)議
- 欠費擔保協(xié)議書模板
- 傷殘鑒定 委托書
- 班組長、員工安全生產責任制考核記錄表
- 老年康體指導職業(yè)教育79課件
- 北京市建設工程施工現(xiàn)場安全生產標準化管理圖集(2019版)
- 2025年江蘇省江寧城建集團招聘筆試參考題庫含答案解析
- 大學生就業(yè)與創(chuàng)業(yè)指導知到智慧樹章節(jié)測試課后答案2024年秋遼寧廣告職業(yè)學院
- 高鈦渣及其產品深加工項目的可行性研究報告
- 2024年中國黃油行業(yè)供需態(tài)勢及進出口狀況分析
- 三下26《和拖延的壞朋友說再見》心理健康教學設計
- 2025屆山東省濰坊市高考英語二模試卷含解析
- 2023無人機系統(tǒng)測評規(guī)范
評論
0/150
提交評論