初學(xué)C#,什么是面向?qū)ο?為什么要使用面向?qū)ο缶幊?(一)
2021-08-23
總結(jié):
對(duì)于 C# 初學(xué)者,什么是面向?qū)ο??為什么要使用面向?qū)ο缶幊??面向?qū)ο蠓治鰧儆?a href='http://dl-ea.com' target='_blank'>軟件開發(fā)過程的問題定義階段,其目標(biāo)是清晰準(zhǔn)確地定義問題域。傳統(tǒng)的系統(tǒng)分析會(huì)產(chǎn)生一套面向過程的文檔,這些文檔定義了目標(biāo)系統(tǒng)的功能;面向?qū)ο蠓治霎a(chǎn)生了描述系統(tǒng)功能和問題域基本特征的綜合文檔。原則 面向?qū)ο蠓治龅闹饕瓌t如下。 1.從許多事物中抽象地摒棄個(gè)別的、非本質(zhì)的特征,提取共同的本質(zhì)特征。這叫做提取
對(duì)于 C# 初學(xué)者,什么是面向?qū)ο螅繛槭裁匆褂妹嫦驅(qū)ο缶幊??面向?qū)ο蠓治鰧儆谲浖_發(fā)過程的問題定義階段,其目標(biāo)是清晰準(zhǔn)確地定義問題域。傳統(tǒng)的系統(tǒng)分析會(huì)產(chǎn)生一套面向過程的文檔,這些文檔定義了目標(biāo)系統(tǒng)的功能;面向?qū)ο蠓治霎a(chǎn)生了描述系統(tǒng)功能和問題域基本特征的綜合文檔。
原則
面向?qū)ο蠓治龅闹饕瓌t如下。
1.摘要
從許多事物中摒棄個(gè)別的、非本質(zhì)的特征,提取共同的本質(zhì)特征,稱為抽象。 抽象是形成概念的必要手段。
抽象原理有兩層意思:第一,問題域中的事物雖然復(fù)雜,但分析者不需要了解和描述它們的一切,只需要分析和研究與系統(tǒng)目標(biāo)相關(guān)的事物,他們的本質(zhì)。 特點(diǎn)。其次,通過丟棄個(gè)體事物細(xì)節(jié)上的差異,提取它們的共同特征,我們可以得到事物的一些抽象概念。 .
2.封裝
封裝就是將一個(gè)對(duì)象的屬性和服務(wù)組合成一個(gè)不可分割的系統(tǒng)單元,盡可能隱藏對(duì)象的內(nèi)部細(xì)節(jié)。
3.繼承
特殊類的對(duì)象所擁有的通用類的所有屬性和服務(wù),稱為特殊類對(duì)通用類的繼承。
面向?qū)ο蠓治霾捎美^承的原則,即在一個(gè)通用類和一個(gè)特殊類形成的每個(gè)通用-特殊結(jié)構(gòu)中,通用類和所有特殊類的對(duì)象實(shí)例都具有屬性和特征。一次性共享服務(wù)。在通用類中明確定義。在特殊類中,通用類中定義的事物不是重復(fù)定義的,而是在語義上,特殊類自動(dòng)隱式地具有其通用類(以及所有更高級(jí)別的通用類)和服務(wù)中定義的所有屬性。繼承原則的優(yōu)點(diǎn)是使系統(tǒng)模型更加簡(jiǎn)潔明了。
4.分類
是將具有相同屬性和服務(wù)的對(duì)象歸為一類,并以此類作為對(duì)這些對(duì)象的抽象描述。分類原則實(shí)際上是抽象原則應(yīng)用于對(duì)象描述的一種表現(xiàn)形式。
5.聚合
聚合的原理是把一個(gè)復(fù)雜的事物看成是幾個(gè)簡(jiǎn)單事物的集合,從而簡(jiǎn)化了對(duì)復(fù)雜事物的描述。
6.聯(lián)系方式
相關(guān)性是人類在思考問題時(shí)經(jīng)常使用的一種思維方式:將一件事與另一件事聯(lián)系起來。人們之所以能夠聯(lián)想,是因?yàn)槭挛镏g存在某種聯(lián)系。
7.簡(jiǎn)訊
這個(gè)原則要求對(duì)象只能通過消息進(jìn)行通信,不允許在對(duì)象外直接訪問對(duì)象的內(nèi)部屬性。消息通信是由封裝原理引起的。在OOA中,需要一個(gè)消息連接來表示對(duì)象之間的動(dòng)態(tài)關(guān)系。
8.粒度控制
一般來說,面對(duì)一個(gè)復(fù)雜的問題域,一個(gè)人不可能同時(shí)看大局和洞察力。因此,你需要控制你的視野:在考慮全局時(shí),注意它的主要組成部分,暫時(shí)不檢查每個(gè)部分的具體細(xì)節(jié);在考慮某一部分的細(xì)節(jié)時(shí),暫時(shí)將其余部分?jǐn)R置一旁。這就是粒度控制的原理。
9.行為分析
現(xiàn)實(shí)世界中事物的行為是復(fù)雜的。由大量事物組成的問題域中的各種行為往往是相互依存和交織在一起的。
階段
面向?qū)ο蟮姆治鲞^程可以分為兩個(gè)階段:?jiǎn)栴}域分析和應(yīng)用分析。
問題域分析是軟件開發(fā)的基本部分。目的是讓開發(fā)者了解問題域的結(jié)構(gòu),建立通用的系統(tǒng)實(shí)現(xiàn)環(huán)境。問題領(lǐng)域分析給出了一組抽象概念(代表問題領(lǐng)域知識(shí)的高層次,往往超出了當(dāng)前應(yīng)用的范圍)作為制定特定系統(tǒng)需求的參考。問題域分析實(shí)際上是一個(gè)學(xué)習(xí)過程。在這個(gè)階段,軟件開發(fā)者應(yīng)該盡可能多地了解當(dāng)前系統(tǒng)中與應(yīng)用相關(guān)的知識(shí),自由思考,放寬考慮范圍,盡可能識(shí)別與應(yīng)用相關(guān)的概念。 問題域分析的邊界可能是模糊的。憑借對(duì)問題領(lǐng)域的廣泛了解,當(dāng)涉及到具體的應(yīng)用時(shí),可以更快地進(jìn)入狀態(tài)面向?qū)ο蟮木幊陶Z言,掌握應(yīng)用的核心知識(shí)。而且,當(dāng)用戶對(duì)目標(biāo)系統(tǒng)的需求發(fā)生變化時(shí),廣泛的分析可以幫助我們預(yù)測(cè)目標(biāo)系統(tǒng)會(huì)發(fā)生哪些變化。通常進(jìn)行小組分析,小組成員可以包括領(lǐng)域?qū)<液头治鰩?。在分析過程中,系統(tǒng)的基本概念(對(duì)象、類、方法、關(guān)系等)。 ) 應(yīng)該承認(rèn),應(yīng)該承認(rèn)問題域的特征,并將這些概念整合到問題域的模型中。問題域的模型必須包含概念之間的關(guān)系以及每個(gè)概念的所有信息。識(shí)別出的相關(guān)概念應(yīng)根據(jù)信息內(nèi)容有機(jī)地整合到問題域的綜合視圖中。
應(yīng)用分析是基于在問題域分析過程中建立的問題域模型。應(yīng)用分析時(shí),將問題域模型應(yīng)用到當(dāng)前的特定應(yīng)用中。 一、利用收集到的用戶信息在問題區(qū)域之間進(jìn)行選擇,以用戶需求為約束,減少問題區(qū)域的信息量。因此,問題域分析的視野大小直接影響應(yīng)用分析保留的信息量。一般來說,問題域分析階段生成的模型不需要用編程語言表達(dá),而應(yīng)用分析階段生成的影響條件需要用某種編程語言表達(dá)。模型識(shí)別的需求可以是一個(gè)應(yīng)用程序,也可以是多個(gè)應(yīng)用程序。通常我們關(guān)注兩個(gè)方面,即應(yīng)用程序視圖和類視圖。在類視圖中,必須詳細(xì)說明每個(gè)類的屬性和操作,必須顯示類之間的交互。
目標(biāo)
Coad 和 Coad 認(rèn)為面向?qū)ο蠓治鰬?yīng)該主要考慮與特定應(yīng)用程序相關(guān)的對(duì)象,以及對(duì)象之間的結(jié)構(gòu)和交互關(guān)系。在面向?qū)ο蠓治鲋?,需要建立分析模型來描述系統(tǒng)的功能。
面向?qū)ο蠓治鲂枰瓿梢韵聝蓚€(gè)任務(wù):
——正式說明所面臨的應(yīng)用問題,最終成為軟件系統(tǒng)基本結(jié)構(gòu)的對(duì)象,以及系統(tǒng)必須遵守的、由應(yīng)用環(huán)境決定的規(guī)則和約束。
-明確說明構(gòu)成系統(tǒng)的對(duì)象如何協(xié)同工作以完成指定的功能。
通過面向?qū)ο蠓治鼋⒌南到y(tǒng)模型是以概念為中心的,所以稱為概念模型。概念模型由一組相關(guān)的類組成。面向?qū)ο蠓治隹梢酝ㄟ^自上而下的逐層分解構(gòu)建系統(tǒng)模型,也可以從定義的類自下而上構(gòu)建新的類。概念模型的構(gòu)建和審核包括以下五個(gè)層次:
——類和對(duì)象層
——屬性層
——服務(wù)層
——結(jié)構(gòu)層
——專題層
這五個(gè)層次不是構(gòu)成軟件系統(tǒng)的層次,而是分析過程中的層次。也可以說這個(gè)問題有不同的方面。每個(gè)級(jí)別的工作都會(huì)向系統(tǒng)規(guī)范添加一個(gè)組件。當(dāng)所有五個(gè)層次的工作都完成時(shí),面向?qū)ο蠓治龅娜蝿?wù)就完成了。
在實(shí)際操作中,面向?qū)ο蠓治龅哪繕?biāo)是獲取問題域的功能模型、對(duì)象模型和動(dòng)態(tài)模型,并用相應(yīng)的UML圖來表示。
步驟
面向?qū)ο蠓治鐾ǔW裱韵虏襟E:
(1)識(shí)別對(duì)象和類??梢詮膽?yīng)用領(lǐng)域開始,逐步確定構(gòu)成整個(gè)應(yīng)用的基本類和對(duì)象。這一步需要分析目標(biāo)系統(tǒng)在領(lǐng)域中的職責(zé),調(diào)查系統(tǒng)環(huán)境,并確定有用的類和對(duì)象。
(2)Logo結(jié)構(gòu)。有兩種典型的結(jié)構(gòu),分別是通用-特殊結(jié)構(gòu)和整體-部分結(jié)構(gòu)。通用-特殊結(jié)構(gòu)是指通用類是基類,特殊類是派生類。對(duì)于比如car是cars的基類是通用-特殊結(jié)構(gòu),整體part結(jié)構(gòu)代表聚合,屬于不同類的成員聚合成一個(gè)新的類,比如輪子、車身、汽車底盤都是part一輛車,這些不同功能的部件聚合成一輛車的整體。
(3) 標(biāo)識(shí)屬性。對(duì)象保存的信息稱為它的屬性。類的屬性描述了狀態(tài)信息。在類的實(shí)例中,屬性的值代表了該對(duì)象的狀態(tài)值對(duì)象。需要找出目標(biāo)系統(tǒng)中的每個(gè)對(duì)象。對(duì)象所需要的屬性,并將屬性排列在適當(dāng)?shù)奈恢茫页鰧?shí)例連接,最后檢查。每個(gè)屬性的名稱和描述應(yīng)該是給定,并對(duì)屬性進(jìn)行特殊限制(如只讀、屬性值限制在一定范圍內(nèi)等)。
(4)身份認(rèn)證服務(wù)。對(duì)象收到消息后進(jìn)行的操作稱為對(duì)象提供的服務(wù)。它描述了系統(tǒng)需要執(zhí)行的處理和功能。定義服務(wù)的目的是定義對(duì)象的行為和對(duì)象之間的通信關(guān)系,具體步驟包括:
——標(biāo)識(shí)對(duì)象的狀態(tài)
- 確定必要的服務(wù)
- 識(shí)別消息連接
——描述服務(wù)
服務(wù)可以用類似于流程圖的圖表來表示。
(5)識(shí)別主體。為了更好地理解包含大量類和對(duì)象的概念模型,需要確定主體,即劃分模型,給出模型的整體框架,并劃分層次。您可以按照以下步驟確定主題。
——確定主題
——改進(jìn)和完善主題
——將主題添加到分析模型中
標(biāo)題是一個(gè)應(yīng)用相關(guān)的概念,不是隨便畫的。主題級(jí)工作有助于理解分析結(jié)果。
優(yōu)勢(shì)
面向?qū)ο蠓治龅囊c(diǎn)是:
(一)加強(qiáng)對(duì)問題域和系統(tǒng)職責(zé)的理解;
(2)改善與分析相關(guān)的各個(gè)人員之間的溝通;
(3)對(duì)需求變化的適應(yīng)能力很強(qiáng);
(4)支持軟件復(fù)用;
(5)整個(gè)軟件生命周期的一致性;
(6)實(shí)用性;
(7)促進(jìn)用戶參與。
面向?qū)ο蟾先祟愃季S,更適合對(duì)客觀問題進(jìn)行建模
把所有的編程當(dāng)作一個(gè)對(duì)象,用正常的方式思考。
如撲克牌、分體牌、玩家牌、牌等
世界上的一切都是對(duì)象。說白了,還是用面向?qū)ο蟊容^實(shí)用。如果你想修改它,它會(huì)更容易,更靈活。示例:您有 5 個(gè)頁(yè)面使用相同的查詢功能。在這5頁(yè)上寫一次代碼方便嗎?當(dāng)然也可以復(fù)制粘貼,但是如果要修改會(huì)比較麻煩,那么可以使用重寫的方法創(chuàng)建A類,寫自己想寫的,需要的時(shí)候再調(diào)用。如果你修改它,你只需要修改它。方便嗎?
什么是 C# 面向?qū)ο?/p>
? 0? 0C# 面向?qū)ο螅?0? 0 面向?qū)ο笏季S:面向過程的編程往往會(huì)導(dǎo)致所謂的單一應(yīng)用,即所有的功能都包含在幾個(gè)模塊中(通常包含在一個(gè)代碼模塊中)。在使用oop(面向?qū)ο螅┘夹g(shù)時(shí),經(jīng)常會(huì)用到很多代碼模塊。每個(gè)模塊提供特定的功能,每個(gè)模塊之間相互隔離,甚至完全獨(dú)立于其他模塊。這種模塊化的編程方法提供了極大的多樣性,大大增加了代碼重用的機(jī)會(huì)。 ? 0? 0 在傳統(tǒng)的應(yīng)用程序中,執(zhí)行過程通常是簡(jiǎn)單和線性的。應(yīng)用程序加載到內(nèi)存中,從A點(diǎn)執(zhí)行到B點(diǎn),然后從內(nèi)存中卸載。在此過程中可能會(huì)使用各種其他實(shí)體,例如媒體文件的存儲(chǔ)或圖形卡功能,但處理的主體始終位于一個(gè)地方。有了oop,事情就不那么簡(jiǎn)單了。雖然可以得到同樣的效果,但是實(shí)現(xiàn)的方式卻完全不同。 Oop技術(shù)基于數(shù)據(jù)結(jié)構(gòu)、意義、數(shù)據(jù)和數(shù)據(jù)交互。這通常意味著必須在項(xiàng)目的設(shè)計(jì)階段投入更多的精力,但項(xiàng)目的可擴(kuò)展性相對(duì)較高。一旦就某類數(shù)據(jù)的表達(dá)達(dá)成一致,該表達(dá)將適用于未來版本的應(yīng)用程序,甚至是全新的應(yīng)用程序。這將大大減少開發(fā)時(shí)間。 ? 0? 0 (一)類:?0?0 類描述了一組相似對(duì)象的共同特征。類和結(jié)構(gòu)實(shí)際上是創(chuàng)建對(duì)象和提供處理和訪問數(shù)據(jù)的對(duì)象的模板。?0?0 類定義了以下元素:?0?01.定義了該類的對(duì)象操作的數(shù)據(jù)結(jié)構(gòu)(屬性的名稱和類型);?0?02.這些對(duì)象要執(zhí)行的操作,特別是哪些操作,以及如何執(zhí)行call 類的對(duì)象執(zhí)行這些操作,以及執(zhí)行這些操作的對(duì)象的“后臺(tái)操作”。?0?0 注意:類中變量的聲明必須指明該變量是否為?0?int i;//聲明一個(gè)int變量并且這個(gè)變量是共享的,也就是說只要對(duì)象被啟用,客戶端就可以在客戶端使用它。如果定義為私有產(chǎn)品,那么即使對(duì)象被啟用,不能在客戶端使用 ?0?0 類定義:? 0? 0 (小程序開發(fā)2@什么是對(duì)象? 0? 0 對(duì)象是 oop 應(yīng)用程序的組件。這個(gè)組件封裝了應(yīng)用程序的一部分,可以是一個(gè)進(jìn)程、一些數(shù)據(jù)或者一些更抽象的實(shí)體。 ?0?0 C#中的對(duì)象是由類型創(chuàng)建的,就像前面的變量一樣,對(duì)象的類型在oop中有一個(gè)特殊的名字:可以使用類的定義來實(shí)例化對(duì)象,即創(chuàng)建對(duì)象的實(shí)例班級(jí)。
C#面向?qū)ο蟮奶攸c(diǎn)是什么?
1.封裝:首先,我們可以把世界上的一切都當(dāng)成一個(gè)對(duì)象。這里我們以人為例,那么人就是一個(gè)對(duì)象。封裝是什么意思?可以理解,封裝就是人要完成一件事。他需要的所有工具都在他身邊,他需要的技能在他的腦海中。這可以在沒有其他人幫助的情況下完成。這樣做的好處是,如果我要命令這個(gè)人完成一件事情,我不需要知道它是如何完成的,我也不需要協(xié)助他完成它。我只知道結(jié)果。如果它完成了,它就會(huì)完成。至于它,我們不需要知道先做什么,后做什么。這將幫助他盡最大努力完成這些事情。書面語言的解釋是:每個(gè)對(duì)象都包含其操作所需的所有信息,因此該對(duì)象不必依賴其他對(duì)象來完成自己的操作。 二、繼承:以人為例。我們知道每個(gè)人都有一些共同的特征,并且必須做同樣的事情。例如:每個(gè)人都有一個(gè)頭,兩只胳膊和兩只腳。這是一個(gè)共同的特點(diǎn),對(duì)吧? 如果你在生活中必須吃喝,所有這些都是一樣的。如果我們現(xiàn)在要聲明很多個(gè)人,每個(gè)人都會(huì)有這些特點(diǎn),那么我們需要寫很多重復(fù)的代碼嗎?因此,我們首先創(chuàng)建一個(gè)人的父類別。這個(gè)父類不代表特定的人,它只是一個(gè)具有一個(gè)人所有共同特征的虛擬人。下次我們要實(shí)例化一個(gè)特定的人,我們只需要繼承上面的“虛擬人”,他就會(huì)擁有一個(gè)人的所有共同特征。無需編寫通過繼承重復(fù)的代碼。
其實(shí),繼承的目的不僅僅是為了節(jié)省代碼,還有實(shí)現(xiàn)背后的多態(tài)。普通初學(xué)者只需要了解繼承就可以少寫很多代碼,在項(xiàng)目中繼續(xù)學(xué)習(xí)。書面解釋如下: 對(duì)象繼承代表一種“is-a”關(guān)系。如果兩個(gè)對(duì)象A和B都可以描述為“B是A”,那么就意味著B可以繼承A。需要注意的是,如果A繼承了B,那么A不僅擁有B除私有特性之外的所有特性,但是A也可以有自己獨(dú)特的特點(diǎn)。在上面這個(gè)人的例子中,一個(gè)人繼承了一個(gè)“虛擬人”,那么他就有了一個(gè)頭、兩條胳膊和兩只腳。他需要吃吃喝喝,或許還能編程。所以編程是他的特點(diǎn),不是每個(gè)人都能編程。三:什么是多態(tài):多態(tài)之前必須有繼承。需要理解的是,只有多個(gè)類同時(shí)繼承同一個(gè)類。有一種說法叫多態(tài)。說到人,舉個(gè)例子。我們之前說過,人們必須“吃”同樣的東西。 “吃”是課堂表現(xiàn)的方式。因?yàn)橐磺卸际侨藖碜龅?,所以我們?cè)凇疤摂M人”里寫了這個(gè)方法之后,吃的方式就不一樣了。有筷子和叉子,有的要飯,有的要面。所以如果我們要描述不同人的進(jìn)食過程,就必須把這個(gè)過程放到一個(gè)具體的子類中。同樣,子類可以用不同的方式實(shí)現(xiàn)。這意味著存在多態(tài)性。有助于程序的靈活性。需要注意的是,如果在子類中重寫了父類的方法(多態(tài)),則不會(huì)再次調(diào)用父類中的方法。
c#面向?qū)ο?/p>
其實(shí)只要理解了繼承、多態(tài)、封裝,也就理解了面向?qū)ο蟆K麜?huì)問你關(guān)于面向?qū)ο蟮膯栴}。其實(shí)你只需要跟他解釋一下繼承多態(tài)封裝的含義就可以了。