欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      學(xué)習(xí)心得《面向?qū)ο蟆?/h1>
      時(shí)間:2019-05-12 12:51:41下載本文作者:會(huì)員上傳

      簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《學(xué)習(xí)心得《面向?qū)ο蟆贰?,但愿?duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《學(xué)習(xí)心得《面向?qū)ο蟆贰贰?

      第一篇:學(xué)習(xí)心得《面向?qū)ο蟆?/a>

      面向?qū)ο笳n程學(xué)習(xí)心得

      這學(xué)期的面向?qū)ο笳n程對(duì)我來(lái)說(shuō)是收獲匪淺的一門(mén)課。通過(guò)老師課件的講解,自己一些相關(guān)書(shū)籍的閱讀和實(shí)踐作業(yè)的完成,逐步對(duì)課程有了由淺及深的認(rèn)識(shí)。

      面向?qū)ο?Object Oriented,OO)是一門(mén)以實(shí)踐為主課程,課程中可以分開(kāi)兩塊OOA(面向?qū)ο笙到y(tǒng)分析)和OOD(面向?qū)ο笙到y(tǒng)設(shè)計(jì))。OOA(面向?qū)ο笙到y(tǒng)分析)主要內(nèi)容: 研究問(wèn)題域和用戶需求,運(yùn)用面向?qū)ο蟮挠^點(diǎn)和原則發(fā)現(xiàn)問(wèn)題域中與系統(tǒng)責(zé)任有關(guān)的對(duì)象,以及對(duì)象的特征和相互關(guān)系.OOA不涉及針對(duì)具體實(shí)現(xiàn)采取的設(shè)計(jì)決策和有關(guān)細(xì)節(jié),獨(dú)立于具體實(shí)現(xiàn)的系統(tǒng)模型。是一個(gè)完整確切反映問(wèn)題域和用戶需求的系統(tǒng)模型。OOA的優(yōu)勢(shì):復(fù)用、可擴(kuò)展、可維護(hù)性、彈性。

      OOD(面向?qū)ο笙到y(tǒng)設(shè)計(jì)):以O(shè)OA模型為基礎(chǔ),按照實(shí)現(xiàn)的要求進(jìn)行設(shè)計(jì)決策,包括全局性的決策和局部細(xì)節(jié)的設(shè)計(jì),與具體的實(shí)現(xiàn)條件相關(guān)。OOD的步驟:細(xì)化重組類(lèi)→細(xì)化和實(shí)現(xiàn)類(lèi)之間的關(guān)系,明確其可見(jiàn)性→增加屬性,指定屬性的類(lèi)型和可見(jiàn)性→分配職責(zé),定義執(zhí)行每個(gè)職責(zé)的方法→對(duì)消息驅(qū)動(dòng)的系統(tǒng),明確消息傳遞的方式→利用設(shè)計(jì)模式進(jìn)行局部設(shè)計(jì)→畫(huà)出詳細(xì)的類(lèi)圖和時(shí)序圖。

      面向?qū)ο蟮姆治雠c設(shè)計(jì)方法將致力于解決傳統(tǒng)軟件研發(fā)過(guò)程中由于軟件模塊化結(jié)構(gòu)化程度不高帶來(lái)的軟件重用性差、軟件可維護(hù)性差、開(kāi)發(fā)出的軟件不能滿足用戶需要等方面問(wèn)題。面向?qū)ο蟮母拍畎ǎ簩?duì)象、對(duì)象的狀態(tài)和行為、類(lèi)、類(lèi)的結(jié)構(gòu)、消息和方法。對(duì)象概念將包含對(duì)象唯一性、抽象性、繼承性、多態(tài)性的重要特征。面向?qū)ο蟮囊匕撼橄?、封裝性、共享性三方面。

      在設(shè)計(jì)模式的研究過(guò)程中,我們組選擇的是迭代器(Iterator)的設(shè)計(jì)模式研究。完成設(shè)計(jì)研究后,我對(duì)迭代器的設(shè)計(jì)模式有了更為深刻的理解。迭代器(Iterator)提供一個(gè)方法順序訪問(wèn)一個(gè)聚合對(duì)象的各個(gè)元素,而又不暴露該對(duì)象的內(nèi)部表示。并了解到迭代器設(shè)計(jì)模式一般在以下三類(lèi)場(chǎng)合使用較多。

      ? 訪問(wèn)一個(gè)聚合對(duì)象的內(nèi)容而無(wú)需暴露它的內(nèi)部表示。? 支持對(duì)聚合對(duì)象的多種遍歷。因?yàn)楸闅v狀態(tài)是保存在每一個(gè)迭代器對(duì)象中的。

      ? 為遍歷不同的聚合結(jié)構(gòu)提供一個(gè)統(tǒng)一的接口。根據(jù)實(shí)現(xiàn)方式的不同,效果上會(huì)有差別。同時(shí)還簡(jiǎn)化了容器的接口。但是在java Collection中為了提高可擴(kuò)展性,容器還是提供了遍歷的接口。在面向?qū)ο蟮能浖O(shè)計(jì)中,我們經(jīng)常會(huì)遇到一類(lèi)集合對(duì)象,這類(lèi)集合對(duì)象的內(nèi)部結(jié)構(gòu)可能有著各種各樣的實(shí)現(xiàn),但是歸結(jié)起來(lái),無(wú)非有兩點(diǎn)是需要我們?nèi)リP(guān)心的:一是集合內(nèi)部的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),二是遍歷集合內(nèi)部的數(shù)據(jù)。面向?qū)ο笤O(shè)計(jì)原則中有一條是類(lèi)的單一職責(zé)原則,所以我們要盡可能的去分解這些職責(zé),用不同的類(lèi)去承擔(dān)不同的職責(zé)。Iterator模式就是分離了集合對(duì)象的遍歷行為,抽象出一個(gè)迭代器類(lèi)來(lái)負(fù)責(zé),這樣既可以做到不暴露集合的內(nèi)部結(jié)構(gòu),又可讓外部代碼透明的訪問(wèn)集合內(nèi)部的數(shù)據(jù)。

      在Java Collection的應(yīng)用中,提供的具體迭代器角色是定義在容器角色中的內(nèi)部類(lèi)。這樣便保護(hù)了容器的封裝。但是同時(shí)容器也提供了遍歷算法接口,你可以擴(kuò)展自己的迭代器。至于迭代器模式的使用??蛻舫绦蛞鹊玫骄唧w容器角色,然后再通過(guò)具體容器角色得到具體迭代器角色。這樣便可以使用具體迭代器角色來(lái)遍歷容器了。

      OOA和OOD之間沒(méi)有明顯的界限。OOA與OOD的不可分割性正好說(shuō)明了OO思想的強(qiáng)大,即軟件過(guò)程階段的無(wú)縫連接,在交流與溝通中不會(huì)產(chǎn)生鴻溝,這是相對(duì)結(jié)構(gòu)化思想的好處,因?yàn)閺墓δ苣K到某塊詳細(xì)控制邏輯設(shè)計(jì)兩者之間的聯(lián)系不是十分緊密,需要分析人員與設(shè)計(jì)人員的再溝通。

      通過(guò)課程的學(xué)習(xí)與實(shí)踐,對(duì)面向?qū)ο蟮睦砟?,以及相關(guān)方法,設(shè)計(jì)模式有了更為深刻的理解與掌握。針對(duì)面向?qū)ο蟮姆治雠c設(shè)計(jì)課程的授課內(nèi)容及方法,我個(gè)人覺(jué)得對(duì)我還是有不少的幫助和 提高。結(jié)合自己的工作,雖然與開(kāi)發(fā)接觸的比較少,但是在運(yùn)維過(guò)程中,如果能了解開(kāi)發(fā)原理,結(jié)合實(shí)際的工作,會(huì)對(duì)一些源代碼的分析能力以及工作效率的提高起到明顯的幫助作用。

      第二篇:C#面向?qū)ο髮W(xué)習(xí)心得

      一、封裝

      這是一種隱藏信息的特性。拿本節(jié)引例來(lái)說(shuō),類(lèi)CalculateDate 將數(shù)據(jù)結(jié)構(gòu)與算法隱藏在類(lèi)的內(nèi)部,外界使用者無(wú)需知道具體技術(shù)實(shí)現(xiàn)細(xì)節(jié)即可使用此類(lèi)。封裝這一特性不僅大大提高了代碼的易用性,而且還使得類(lèi)的開(kāi)發(fā)者可以方便地更換新的算法,這種變化不會(huì)影響使用類(lèi)的外部代碼。可以用以下公式展示類(lèi)的封裝特性:封裝的類(lèi)=數(shù)據(jù)+對(duì)此數(shù)據(jù)所進(jìn)行的操作(即算法)。通俗地說(shuō),封裝就是:包起外界不必需要知道的東西,只向外界展露可供展示的東西。在面向?qū)ο罄碚撝校庋b這個(gè)概念擁有更為寬廣的含義。小到一個(gè)簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu),大到一個(gè)完整的軟件子系統(tǒng),靜態(tài)的如某軟件系統(tǒng)要收集數(shù)據(jù)信息項(xiàng),動(dòng)態(tài)的如某個(gè)工作處理流程,都可以封裝到一個(gè)類(lèi)中。具備這種“封裝”的意識(shí),是掌握面向?qū)ο蠓治雠c設(shè)計(jì)技巧的關(guān)鍵。

      二、繼承

      繼承是面向?qū)ο缶幊讨幸粋€(gè)非常重要的特性,它也是另一個(gè)重要特性——多態(tài)的基礎(chǔ)。現(xiàn)實(shí)生活中的事物都?xì)w屬于一定的類(lèi)別。在一些書(shū)中,將父類(lèi)稱為超類(lèi)(super class)。“繼承”關(guān)系有時(shí)又稱為“派生”關(guān)系,“B 繼承自A”,可以說(shuō)為“B 派生自A”,或反過(guò)來(lái)說(shuō),“A 派生出B”。父類(lèi)與子類(lèi)之間擁有以下兩個(gè)基本特性:

      (1)是一種(IS-A)關(guān)系:子類(lèi)是父類(lèi)的一種特例。

      (2)擴(kuò)充(Extends)關(guān)系:子類(lèi)擁有父類(lèi)所沒(méi)有的功能。

      1.類(lèi)成員的訪問(wèn)權(quán)限

      面向?qū)ο缶幊痰囊淮筇攸c(diǎn)就是可以控制類(lèi)成員的可訪問(wèn)性。當(dāng)前主流的面向?qū)ο笳Z(yǔ)言都擁有以下三種基本的可訪問(wèn)性:

      (1)公有 public 訪問(wèn)不受限制。

      (2)私有 private 只有類(lèi)自身成員可以訪問(wèn)。

      (3)保護(hù) protected 子類(lèi)可以訪問(wèn),其他類(lèi)無(wú)法訪問(wèn)。

      由此可見(jiàn),可以通過(guò)子類(lèi)對(duì)象訪問(wèn)其父類(lèi)的所有公有成員,事實(shí)上,外界根本分不清楚對(duì)象的哪些公有成員來(lái)自父類(lèi),哪些公有成員來(lái)自子類(lèi)自身。小結(jié)一下繼承條件下的類(lèi)成員訪問(wèn)權(quán)限:

      (1)所有不必讓外人知道的東西都是私有的。

      (2)所有需要向外提供的服務(wù)都是公有的。

      (3)所有的“祖?zhèn)鹘^招”,“秘不外傳”的都是保護(hù)的。

      C#中還有一種可訪問(wèn)性,就是由關(guān)鍵字internal 所確定的“內(nèi)部”訪問(wèn)性。internal 有點(diǎn)像public,外界類(lèi)也可以直接訪問(wèn)聲明為internal 的類(lèi)或類(lèi)的成員,但這只局限于同一個(gè)程序集內(nèi)部。

      讀者可以簡(jiǎn)單地將程序集理解為一個(gè)獨(dú)立的DLL 或EXE 文件。一個(gè)DLL 或EXE 文件中可以有多個(gè)類(lèi),如果某個(gè)類(lèi)可被同一程序集中的類(lèi)訪問(wèn),但其他程序集中的類(lèi)不能訪問(wèn)它,則稱此類(lèi)具有internal 訪問(wèn)性。internal 是C#的默認(rèn)可訪問(wèn)性,這就是說(shuō),如果某個(gè)類(lèi)沒(méi)有任何可訪問(wèn)性關(guān)鍵字在它前面,則它就是internal 的。

      2.子類(lèi)父類(lèi)變量的相互賦值

      子類(lèi)對(duì)象可以被當(dāng)成基類(lèi)對(duì)象使用。這是因?yàn)樽宇?lèi)對(duì)象本就是一種(IS_A)父類(lèi)對(duì)象,因此,以下代碼是合法的:

      Parent p;

      Son c = new Son();

      p = c;

      然而,反過(guò)來(lái)就不可以,父類(lèi)對(duì)象變量不可以直接賦值給子類(lèi)變量。如果確信父類(lèi)變量中所引用的對(duì)象的確是子類(lèi)類(lèi)型,則可以通過(guò)類(lèi)型強(qiáng)制轉(zhuǎn)換進(jìn)行賦值,其語(yǔ)法格式為: 子類(lèi)對(duì)象變量=(子類(lèi)名稱)基類(lèi)對(duì)象變量;

      子類(lèi)對(duì)象變量=基類(lèi)對(duì)象變量 as 子類(lèi)名稱;

      3.方法重載、隱藏與虛方法調(diào)用

      由于子類(lèi)對(duì)象同時(shí)匯集了父類(lèi)和子類(lèi)的所有公共方法,而C#并未對(duì)子類(lèi)和父類(lèi)的方法名稱進(jìn)行過(guò)多限制,因此,一個(gè)問(wèn)題出現(xiàn)了:如果子類(lèi)中某個(gè)方法與父類(lèi)方法的簽名一樣(即方法名和方法參數(shù)都一樣),那當(dāng)通過(guò)子類(lèi)對(duì)象訪問(wèn)此方法時(shí),訪問(wèn)的是子類(lèi)還是父類(lèi)所定義的方法?讓我們先從子類(lèi)方法與父類(lèi)方法之間的關(guān)系說(shuō)起。總的來(lái)說(shuō),子類(lèi)方法與父類(lèi)方法之間的關(guān)系可以概括為以下三種:

      (1)擴(kuò)充(Extend):子類(lèi)方法,父類(lèi)沒(méi)有;

      (2)重載(Overload):子類(lèi)有父類(lèi)的同名函數(shù),但參數(shù)類(lèi)型或數(shù)目不一樣;

      (3)完全相同:子類(lèi)方法與父類(lèi)方法從方法名稱到參數(shù)類(lèi)型完全一樣。

      當(dāng)子類(lèi)與父類(lèi)擁有完全一樣的方法時(shí),稱“子類(lèi)隱藏了父類(lèi)的同名方法,當(dāng)分別位于父類(lèi)和子類(lèi)的兩個(gè)方法完全一樣時(shí),調(diào)用哪個(gè)方法由對(duì)象變量的類(lèi)型決定?!皀ew”關(guān)鍵字明確告訴C#編譯器,子類(lèi)隱藏父類(lèi)的同名方法,提供自己的新版本。如果子類(lèi)隱藏了父類(lèi)的同名方法,要在子類(lèi)方法的實(shí)現(xiàn)代碼中調(diào)用父類(lèi)被隱藏的同名方法時(shí)要使用base 關(guān)鍵字。如果子類(lèi)隱藏了父類(lèi)的同名方法,不進(jìn)行強(qiáng)制轉(zhuǎn)換,就無(wú)法通過(guò)父類(lèi)變量直接調(diào)用子類(lèi)的同名方法,哪怕父類(lèi)變量引用的是子類(lèi)對(duì)象。這是不太合理的。我們希望每個(gè)對(duì)象都只干自己職責(zé)之內(nèi)的事,即如果父類(lèi)變量引用的是子類(lèi)對(duì)象,則調(diào)用的就是子類(lèi)定義的方法,而如果父類(lèi)變量引用的就是父類(lèi)對(duì)象,則調(diào)用的是父類(lèi)定義的方法。這就是說(shuō),希望每個(gè)對(duì)象都“各人自掃門(mén)前雪,莫管他人瓦上霜”。為達(dá)到這個(gè)目的,可以在父類(lèi)同名方法前加關(guān)鍵字virtual,表明這是一個(gè)虛方法,子類(lèi)可以重寫(xiě)此方法:即在子類(lèi)同名方法前加關(guān)鍵字override,表明對(duì)父類(lèi)同名方法進(jìn)行了重寫(xiě)。所以,將父類(lèi)方法定義為虛方法,子類(lèi)重寫(xiě)同名方法之后,通過(guò)父類(lèi)變量調(diào)用此方法,到底是調(diào)用父類(lèi)還是子類(lèi)的,由父類(lèi)變量引用的真實(shí)對(duì)象類(lèi)型決定,而與父類(lèi)變量無(wú)關(guān)!很明顯,“虛方法調(diào)用”特性可以讓我們寫(xiě)出非常靈活的代碼,大大減少由于系統(tǒng)功能

      擴(kuò)充和改變所帶來(lái)的大量代碼修改工作量。由此給出結(jié)論:面向?qū)ο笳Z(yǔ)言擁有的“虛方法調(diào)用”特性,使我們可以只用同樣的一個(gè)語(yǔ)句,在運(yùn)行時(shí)根據(jù)對(duì)象類(lèi)型而執(zhí)行不同的操作。

      三、抽象

      1.抽象類(lèi)與抽象方法

      在一個(gè)類(lèi)前面加上“abstract”關(guān)鍵字,此類(lèi)就成為了抽象類(lèi)。對(duì)應(yīng)地,一個(gè)方法類(lèi)前面加上“abstract”關(guān)鍵字,此方法就成為了抽象方法。注意抽象方法不能有實(shí)現(xiàn)代碼,在函數(shù)名后直接跟一個(gè)分號(hào)。抽象類(lèi)專(zhuān)用于派生出子類(lèi),子類(lèi)必須實(shí)現(xiàn)抽象類(lèi)所聲明的抽象方法,否則,子類(lèi)仍是抽象類(lèi)。抽象類(lèi)一般用于表達(dá)一種比較抽象的事物,而抽象方法則說(shuō)明此抽象類(lèi)應(yīng)該具有的某種性質(zhì),從同一抽象類(lèi)中繼承的子類(lèi)擁有相同的方法(即抽象類(lèi)所定義的抽象方法),但這些方法的具體代碼每個(gè)類(lèi)都可以不一樣。抽象類(lèi)不能創(chuàng)建對(duì)象,一般用

      它來(lái)引用子類(lèi)對(duì)象。一個(gè)抽象類(lèi)中可以包含非抽象的方法和字段。因此:包含抽象方法的類(lèi)一定是抽象類(lèi),但抽象類(lèi)中的方法不一定是抽象方法。除了方法可以是抽象的之外,屬性也可以是抽象的。

      2.接口

      接口可以看成是一種“純”的抽象類(lèi),它的所有方法都是抽象方法。抽象類(lèi)定義了對(duì)象所屬的類(lèi)別,而接口實(shí)際上定義了一種對(duì)象應(yīng)具有的行為特性。某個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,當(dāng)創(chuàng)建一個(gè)此類(lèi)的對(duì)象之后,通過(guò)引用這個(gè)對(duì)象的對(duì)象變量可以訪問(wèn)其所有的公有方法(包括自身的公有方法以及由接口定義的公有方法以)。在這種情況下,根本分不清哪些方法是由接口定義的,哪些是由類(lèi)自己定義的。C#提供了一種“顯式接口”實(shí)現(xiàn)機(jī)制,可以區(qū)分開(kāi)這兩種情況。由此得到一個(gè)結(jié)論:如果一個(gè)類(lèi)顯式實(shí)現(xiàn)某個(gè)接口,則只能以此接口類(lèi)型的變量為媒介調(diào)用此接口所定義的方法,而不允許通過(guò)類(lèi)的對(duì)象變量直接調(diào)用?;蛘哌@樣說(shuō):被顯式實(shí)現(xiàn)的接口方法只能通過(guò)接口實(shí)例訪問(wèn),而不能通過(guò)類(lèi)實(shí)例直接訪問(wèn)。

      四、多態(tài)

      方法重載屬于多態(tài)的一種,兩個(gè)構(gòu)成重載關(guān)系的函數(shù)必須滿足幾個(gè)條件:函數(shù)名相同、參數(shù)類(lèi)型不同,或參數(shù)個(gè)數(shù)不同。具體調(diào)用哪個(gè)方法要看參數(shù),需要注意的是,方法返回值類(lèi)型的不同不是方法重載的判斷條件。多態(tài)編程的基本原理是:使用基類(lèi)或接口變量編程。在多態(tài)編程中,基類(lèi)一般都是抽象基類(lèi),其中擁有一個(gè)或多個(gè)抽象方法,各個(gè)子類(lèi)可以根據(jù)需要重寫(xiě)這些方法?;蛘呤褂媒涌?,每個(gè)接口都規(guī)定了一個(gè)或多個(gè)抽象方法,實(shí)現(xiàn)接口的類(lèi)根據(jù)需要實(shí)現(xiàn)這些方法。因此,多態(tài)的實(shí)現(xiàn)分為兩大基本類(lèi)別:繼承多態(tài)和接口多態(tài)。

      1.接口多態(tài)與繼承多態(tài)

      接口多態(tài)與繼承多態(tài)其編程方式與作用都是類(lèi)似的。但由于一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,所以,接口多態(tài)較繼承多態(tài)更靈活,因而在編程中也用得更廣。多態(tài)是面向?qū)ο蠹夹g(shù)中最精華的部分之一。大量的精巧軟件設(shè)計(jì)方案都建立在對(duì)多態(tài)特性的巧妙應(yīng)用上。在編程中應(yīng)用多態(tài),可以將其簡(jiǎn)化為兩句:應(yīng)用繼承實(shí)現(xiàn)對(duì)象的統(tǒng)一管理;應(yīng)用接口定義對(duì)象的行為特性。對(duì)比傳統(tǒng)的不使用多態(tài)的編程方式,使用多態(tài)的好處是:當(dāng)要修改程序并擴(kuò)充系統(tǒng)時(shí),需要修改的地方較少,對(duì)其他部分代碼的影響較小。

      五、類(lèi)與對(duì)象

      類(lèi)是面向?qū)ο缶幊痰幕締卧?,與使用C語(yǔ)言等結(jié)構(gòu)化編程語(yǔ)言不一樣,使用C#編程,所有的程序代碼幾乎都放在類(lèi)中,不存在獨(dú)立于類(lèi)之外的函數(shù)。一個(gè)類(lèi)可以包含兩種成員:靜態(tài)成員和實(shí)例成員,靜態(tài)成員是供類(lèi)的所有對(duì)象所共享的,而實(shí)例成員只供某一個(gè)對(duì)象所有。實(shí)例成員與靜態(tài)成員的訪問(wèn)規(guī)則:位于同一類(lèi)中的實(shí)例方法可直接相互調(diào)用;類(lèi)的字段(包括實(shí)例字段和靜態(tài)字段)可以被同一類(lèi)中的所有實(shí)例方法直接訪問(wèn);類(lèi)中的靜態(tài)方法只能直接訪問(wèn)類(lèi)靜態(tài)字段。

      類(lèi)中包括:方法和字段,屬性是一種特殊的字段,它可以保證數(shù)據(jù)的合法性,方法和字段這兩個(gè)概念是面向?qū)ο罄碚摰男g(shù)語(yǔ),是通用于各種面向?qū)ο笳Z(yǔ)言的。字段(Field)代表了類(lèi)中的數(shù)據(jù),在類(lèi)的所有方法之外定義一個(gè)變量即定義了一個(gè)字段。在變量之前可以加上public、private 和protected 表示字段的訪問(wèn)權(quán)限。方法(function)功能代碼的集合,在程序開(kāi)發(fā)過(guò)程中,經(jīng)常發(fā)現(xiàn)多處需要實(shí)現(xiàn)或調(diào)用某一個(gè)公用功能,這些功能的實(shí)現(xiàn)都需要書(shū)

      寫(xiě)若干行代碼。如果在調(diào)用此功能的地方重復(fù)書(shū)寫(xiě)這些功能代碼,將會(huì)使整個(gè)程序中代碼大量重復(fù),會(huì)增大開(kāi)發(fā)工作量,增加代碼維護(hù)的難度。為了解決代碼重復(fù)的問(wèn)題,絕大多數(shù)程序設(shè)計(jì)語(yǔ)言都將完成某一公用功能的多個(gè)語(yǔ)句組合在一起,起一個(gè)名字用于代表這些語(yǔ)句的全體,這樣的代碼塊被稱為“函數(shù)(function)”。引入“函數(shù)”概念之后,程序中凡需要調(diào)用此公用功能的地方都可以只寫(xiě)出函數(shù)名,此名字就代表了函數(shù)中所包含的所有代碼,這樣一來(lái),就不再需要在多個(gè)地方重復(fù)書(shū)寫(xiě)這些功能代碼。

      對(duì)象是以類(lèi)為模板創(chuàng)建出來(lái)的。類(lèi)與對(duì)象之間是一對(duì)多的關(guān)系。在C#中,使用new 關(guān)鍵字創(chuàng)建對(duì)象。在程序中“活躍”的是對(duì)象而不是類(lèi)。在面向?qū)ο箢I(lǐng)域,對(duì)象有時(shí)又被稱為是“類(lèi)的實(shí)例”,“對(duì)象”與“類(lèi)的實(shí)例”這兩個(gè)概念是等同的。

      六、值類(lèi)型與引用類(lèi)型

      1.值類(lèi)型

      值類(lèi)型變量與引用類(lèi)型變量的內(nèi)存分配模型也不一樣。每個(gè)正在運(yùn)行的程序都對(duì)應(yīng)著一個(gè)進(jìn)程(process),在一個(gè)進(jìn)程內(nèi)部,可以有一個(gè)或多個(gè)線程(thread),每個(gè)線程都擁有一塊“自留地”,稱為“線程堆棧”,大小為1M,用于保存自身的一些數(shù)據(jù),比如函數(shù)中定義的局部變量、函數(shù)調(diào)用時(shí)傳送的參數(shù)值等,這部分內(nèi)存區(qū)域的分配與回收不需要程序員干涉。所有值類(lèi)型的變量都是在線程堆棧中分配的。值類(lèi)型共有三種:簡(jiǎn)單類(lèi)型、枚舉類(lèi)型和結(jié)構(gòu)類(lèi)型。

      2.引用類(lèi)型

      另一塊內(nèi)存區(qū)域稱為“堆(heap)”,在.NET 這種托管環(huán)境下,堆由CLR 進(jìn)行管理,所以又稱為“托管堆(managed heap)”。用new 關(guān)鍵字創(chuàng)建的類(lèi)的對(duì)象時(shí),分配給對(duì)象的內(nèi)存單元就位于托管堆中。在程序中我們可以隨意地使用new 關(guān)鍵字創(chuàng)建多個(gè)對(duì)象,因此,托管堆中的內(nèi)存資源是可以動(dòng)態(tài)申請(qǐng)并使用的,當(dāng)然用完了必須歸還。打個(gè)比方更易理解:托管堆相當(dāng)于一個(gè)旅館,其中的房間相當(dāng)于托管堆中所擁有的內(nèi)存單元。當(dāng)程序員用new 方法創(chuàng)建對(duì)象時(shí),相當(dāng)于游客向旅館預(yù)訂房間,旅館管理員會(huì)先看一下有沒(méi)有合適的空房間,有的話,就可以將此房間提供給游客住宿。當(dāng)游客旅途結(jié)束,要辦理退房手續(xù),房間又可以為其他旅客提供服務(wù)了。引用類(lèi)型共有四種:類(lèi)類(lèi)型、接口類(lèi)型、數(shù)組類(lèi)型和委托類(lèi)型。所有引用類(lèi)型變量所引用的對(duì)象,其內(nèi)存都是在托管堆中分配的。嚴(yán)格地說(shuō),我們常說(shuō)的“對(duì)象變量”其實(shí)是類(lèi)類(lèi)型的引用變量。但在實(shí)際中人們經(jīng)常將引用類(lèi)型的變量簡(jiǎn)稱為“對(duì)象變量”,用它來(lái)指代所有四種類(lèi)型的引用變量。

      七、命名空間與類(lèi)庫(kù)

      1.命名空間

      在使用面向?qū)ο蠹夹g(shù)開(kāi)發(fā)的現(xiàn)代軟件系統(tǒng)中,經(jīng)常擁有數(shù)百甚至上千個(gè)類(lèi),為了方便地管理這些類(lèi),面向?qū)ο蠹夹g(shù)引入了“命名空間(namespace)”的概念。命名空間可以看成是類(lèi)的“容器”,它可以包含多個(gè)類(lèi)。.NET Framework 使用命名空間來(lái)管理所有的類(lèi)。如果把類(lèi)比喻成書(shū)的話,則命名空間類(lèi)似于放書(shū)的書(shū)架,書(shū)放在書(shū)架上,類(lèi)放在命名空間里。當(dāng)我們?nèi)D書(shū)館查找一本書(shū)時(shí),需要指定這本書(shū)的編號(hào),編號(hào)往往規(guī)定了書(shū)放在哪個(gè)書(shū)庫(kù)的哪個(gè)書(shū)架上,通過(guò)逐漸縮小的范圍:圖書(shū)館->書(shū)庫(kù)->書(shū)架,最終可以在某個(gè)書(shū)架中找到這本書(shū)。類(lèi)似地,可以采用圖書(shū)館保存圖書(shū)類(lèi)似的方法來(lái)管理類(lèi),通過(guò)逐漸縮小的范圍:最大的命名空間->子命名空間->孫命名空間??,最終找到一個(gè)類(lèi)。

      2.類(lèi)庫(kù)

      為了提高軟件開(kāi)發(fā)的效率,人們?cè)谡麄€(gè)軟件開(kāi)發(fā)過(guò)程中大量應(yīng)用了軟件工程的模塊化原則,將可以在多個(gè)項(xiàng)目中使用的代碼封裝為可重用的軟件模塊,其于這些可復(fù)用的軟件模塊,再開(kāi)發(fā)新項(xiàng)目就成為“重用已有模塊,再開(kāi)發(fā)部分新模塊,最后將新舊模塊組裝起來(lái)”的過(guò)程。整個(gè)軟件開(kāi)發(fā)過(guò)程類(lèi)似于現(xiàn)代工業(yè)的生產(chǎn)流水線,生產(chǎn)線上的每個(gè)環(huán)節(jié)都由特定的人員負(fù)責(zé),整個(gè)生產(chǎn)線上的工作人員既分工明確又相互合作,大大地提高了生產(chǎn)效率。在組件化開(kāi)發(fā)大行其道的今天,人們通常將可以重用的軟件模塊稱為“軟件組件”。在全面向?qū)ο蟮?NET 軟件平臺(tái)之上,軟件組件的表現(xiàn)形式為程序集(Assembly),可以通過(guò)在Visual Studio 中創(chuàng)建并編譯一個(gè)類(lèi)庫(kù)項(xiàng)目得到一個(gè)程序集。在Visual Studio 的項(xiàng)目模板中,可以很方便地創(chuàng)建類(lèi)庫(kù)(Class Library)項(xiàng)目,Visual Studio 會(huì)自動(dòng)在項(xiàng)目中添加一個(gè)名為Class1.cs 的類(lèi)文件,程序員可在此類(lèi)文件中書(shū)寫(xiě)代碼,或者添加新的類(lèi)。一個(gè)類(lèi)庫(kù)項(xiàng)目中可以容納的類(lèi)數(shù)目沒(méi)有限制,但只有聲明為public 的類(lèi)可以被外界使用。類(lèi)庫(kù)項(xiàng)目編譯之后,會(huì)生成一個(gè)動(dòng)態(tài)鏈接庫(kù)(DLL:Dynamic Link Library)文件。這就是可以被重用的.NET 軟件組件——程序集。默認(rèn)情況下,類(lèi)庫(kù)文件名就是項(xiàng)目名加上“.dll”后綴。每個(gè)類(lèi)庫(kù)項(xiàng)目都擁有一個(gè)默認(rèn)的命名空間,可以通過(guò)類(lèi)庫(kù)項(xiàng)目的屬性窗口來(lái)指定。需要仔細(xì)區(qū)分“類(lèi)庫(kù)項(xiàng)目”、“程序集”和“命名空間”這三個(gè)概念的區(qū)別:

      (1)每個(gè)類(lèi)庫(kù)項(xiàng)目編譯之后,將會(huì)生成一個(gè)程序集。

      (2)類(lèi)庫(kù)項(xiàng)目中可以擁有多個(gè)類(lèi),這些類(lèi)可屬于不同的命名空間。

      (3)不同的類(lèi)庫(kù)項(xiàng)目可以定義相同的命名空間。

      根據(jù)上述三個(gè)特性,可以得到以下結(jié)論:“命名空間”是一個(gè)邏輯上的概念,它的物理載體是“程序集”,具體體現(xiàn)為“DLL”(或EXE)文件。在Visual Studio 中,可通過(guò)創(chuàng)建“類(lèi)庫(kù)”類(lèi)型的項(xiàng)目生成程序集。一個(gè)程序集可以有多個(gè)命名空間,而一個(gè)命名空間也可以分布于多個(gè)程序集。一旦生成了一個(gè)程序集,在其他項(xiàng)目中就可以通過(guò)添加對(duì)這一程序集的引用而使用此程序集中的類(lèi)。其方法是在“項(xiàng)目”菜單中選擇“添加程序集”命令,激活“瀏覽”卡片,選擇一個(gè)現(xiàn)有的程序集文件(DLL 或EXE)。一個(gè)項(xiàng)目添加完對(duì)特定程序集的引用之后,就可以直接創(chuàng)建此程序集中的類(lèi)了,當(dāng)然要注意指明其命名空間。

      八、委托

      委托是一種新的面向?qū)ο笳Z(yǔ)言特性,在歷史比較長(zhǎng)的面向?qū)ο笳Z(yǔ)言比如C++中并未出現(xiàn)過(guò)。微軟公司在設(shè)計(jì)運(yùn)行于.NET Framework平臺(tái)之上的面向?qū)ο笳Z(yǔ)言(如C#和VisualBasic.NET)時(shí)引入了這一新特性。委托(delegate)也可以看成是一種數(shù)據(jù)類(lèi)型,可以用于定義變量。但它是一種特殊的數(shù)據(jù)類(lèi)型,它所定義的變量能接收的數(shù)值只能是一個(gè)函數(shù),更確切地說(shuō),委托類(lèi)型的變量可以接收一個(gè)函數(shù)的地址,很類(lèi)似于C++語(yǔ)言的函數(shù)指針。簡(jiǎn)單地說(shuō):委托變量可看成是一種類(lèi)型安全的函數(shù)指針,它只能接收符合其要求的函數(shù)地址。委托可以看成是一個(gè)函數(shù)的“容器”,將某一具體的函數(shù)“裝入”后,就可以把它當(dāng)成函數(shù)一樣使用。定義委托類(lèi)型時(shí)對(duì)函數(shù)的要求被稱為函數(shù)的“簽名(signature)”。函數(shù)的簽名規(guī)定了函數(shù)的參數(shù)數(shù)目和類(lèi)型,以及函數(shù)的返回值,體現(xiàn)了函數(shù)的本質(zhì)特征。每一個(gè)委托都確定了一個(gè)函數(shù)的簽名。擁有不同簽名的函數(shù)不能賦值給同一類(lèi)型的委托變量。因此,一個(gè)委托類(lèi)型的變量,可以引用任何一個(gè)滿足其要求的函數(shù)。

      1.委托的組合與分解

      委托變量可以代表某一函數(shù),使用委托變量就相當(dāng)于調(diào)用一個(gè)函數(shù)。如果僅是這么簡(jiǎn)單,那么直接調(diào)用函數(shù)不就行了嗎?為什么還要引入“委托”這一特性?事實(shí)上,委托不僅可以代表一個(gè)函數(shù),還可以組合“一堆”的函數(shù),然后批量執(zhí)行它們,這樣的委托變量又稱為“多路委托變量”。可以用加法運(yùn)算符來(lái)組合單個(gè)委托變量為多路委托變量。類(lèi)似地,也可以使用減法運(yùn)算符來(lái)從一個(gè)多路委托變量中移除某個(gè)委托變量。

      2.事件與多路委托

      事件的主要特點(diǎn)是一對(duì)多關(guān)聯(lián),即一個(gè)事件源,多個(gè)響應(yīng)者。在具體技術(shù)上,.NET Framework 的事件處理機(jī)制是基于多路委托實(shí)現(xiàn)的。事件與多路委托其實(shí)大同小異,只不過(guò)多路委托允許在事件源對(duì)象之外激發(fā)事件罷了。所有的.NET Framework 可視化窗體控件的預(yù)定義事件,都是某一對(duì)應(yīng)的“事件名+Handler”委托類(lèi)型的變量。與此事件相關(guān)的信息都封裝在“事件名+Args”類(lèi)型的事件參數(shù)中,此事件參數(shù)有一個(gè)基類(lèi)EventArgs,它是所有事件參數(shù)的基類(lèi)。明了上述內(nèi)部機(jī)理,對(duì)于我們?cè)诔绦蛑卸x自己的事件非常有好處,尤其是開(kāi)發(fā)一個(gè)自定義的可視化控件時(shí),如果需要增加新的事件類(lèi)型,我們應(yīng)盡量遵循.NET Framework 的定義事件的框架,給事件取一個(gè)名字,定義一個(gè)“事件名+Handler”的事件委托類(lèi)型,再?gòu)腅ventArgs 派生出自定義事件的參數(shù),取名為“事件名+Args”。

      面向?qū)ο蟮能浖到y(tǒng)有許多都是事件驅(qū)動(dòng)的,ASP.NET 就采用了“事件驅(qū)動(dòng)”的編程方式。所謂“事件驅(qū)動(dòng)”的開(kāi)發(fā)方式,就是指整個(gè)系統(tǒng)包含許多的對(duì)象,這些對(duì)象可以引發(fā)多種事件,軟件工程師的主要開(kāi)發(fā)工作就是針對(duì)特定的事件書(shū)寫(xiě)代碼響應(yīng)它們。.NET 事件處理機(jī)制建立在委托的基礎(chǔ)之上,而這兩者都是ASP.NET 技術(shù)的基礎(chǔ)之一。因此,必須牢固地掌握好委托和事件這兩種編程技術(shù),才能為掌握ASP.NET 技術(shù)掃清障礙。

      第三篇:java面向?qū)ο蟮膶W(xué)習(xí)心得

      Java面向?qū)ο蟮膶W(xué)習(xí)心得

      大三的時(shí)候?qū)W校組織我們?nèi)ヌK州NIIT參加四個(gè)月的java實(shí)訓(xùn),我開(kāi)始系統(tǒng)的學(xué)習(xí)期java,之前大學(xué)的時(shí)候?qū)W的比較寬泛,沒(méi)有專(zhuān)門(mén)的正對(duì)java的學(xué)習(xí)。

      首先我是從學(xué)習(xí)Java編程開(kāi)始接觸OOP(面向?qū)ο缶幊?,剛開(kāi)始使用Java編寫(xiě)程序的時(shí)候感覺(jué)很別扭,因?yàn)槲以缫粤?xí)慣用C來(lái)編寫(xiě)程序,很欣賞C的簡(jiǎn)潔性和高效性,喜歡C簡(jiǎn)練而表達(dá)能力豐富的風(fēng)格,特別忍受不了Java運(yùn)行起來(lái)慢吞吞的速度,相對(duì)冗長(zhǎng)的代碼,而且一個(gè)很簡(jiǎn)單的事情,要寫(xiě)好多類(lèi),一個(gè)類(lèi)調(diào)用一個(gè)類(lèi),心里的抵觸情緒很強(qiáng)。

      我對(duì)Java的面向?qū)ο蟮奶匦宰聊チ季?,自認(rèn)為有所領(lǐng)悟,也開(kāi)始有意識(shí)的運(yùn)用OOP風(fēng)格來(lái)寫(xiě)程序,然而還是經(jīng)常會(huì)覺(jué)得不知道應(yīng)該怎樣提煉類(lèi),面對(duì)一個(gè)具體的問(wèn)題的時(shí)候,會(huì)覺(jué)得腦子里千頭萬(wàn)緒的,不知道怎么下手,一不小心,又會(huì)回到原來(lái)的思路上去。

      舉個(gè)例子,要發(fā)廣告郵件,廣告郵件列表存在數(shù)據(jù)庫(kù)里面。倘若用C來(lái)寫(xiě)的話,一般會(huì)這樣思考,先把郵件內(nèi)容讀入,然后連接數(shù)據(jù)庫(kù),循環(huán)取郵件地址,調(diào)用本機(jī)的qmail的sendmail命令發(fā)送。

      然后考慮用Java來(lái)實(shí)現(xiàn),既然是OOP,就不能什么代碼都塞到main過(guò)程里面,于是就設(shè)計(jì)了三個(gè)類(lèi):

      一個(gè)類(lèi)是負(fù)責(zé)讀取數(shù)據(jù)庫(kù),取郵件地址,調(diào)用qmail的sendmail命令發(fā)送; 一個(gè)類(lèi)是讀郵件內(nèi)容,MIME編碼成HTML格式的,再加上郵件頭;

      一個(gè)主類(lèi)負(fù)責(zé)從命令讀參數(shù),處理命令行參數(shù),調(diào)用發(fā)email的類(lèi)。

      把一件工作按照功能劃分為3個(gè)模塊分別處理,每個(gè)類(lèi)完成一件模塊任務(wù)。

      仔細(xì)的分析一下,就會(huì)發(fā)現(xiàn)這樣的設(shè)計(jì)完全是從程序員實(shí)現(xiàn)程序功能的角度來(lái)設(shè)計(jì)的,或者說(shuō),設(shè)計(jì)類(lèi)的時(shí)候,是自低向上的,從機(jī)器的角度到現(xiàn)實(shí)世界的角度來(lái)分析問(wèn)題的。因此在設(shè)計(jì)的時(shí)候,就已經(jīng)把程序編程實(shí)現(xiàn)的細(xì)節(jié)都考慮進(jìn)去了,企圖從底層實(shí)現(xiàn)程序這樣的出發(fā)點(diǎn)來(lái)達(dá)到滿足現(xiàn)實(shí)世界的軟件需求的目標(biāo)。

      這樣的分析方法其實(shí)是不適用于Java這樣面向?qū)ο蟮木幊陶Z(yǔ)言,因?yàn)?,如果改用C語(yǔ)言,封裝兩個(gè)C函數(shù),都會(huì)比Java實(shí)現(xiàn)起來(lái)輕松的多,邏輯上也清楚的多。

      我覺(jué)得面向?qū)ο蟮木柙谟诳紤]問(wèn)題的思路是從現(xiàn)實(shí)世界的人類(lèi)思維習(xí)慣出發(fā)的,只要領(lǐng)會(huì)了這一點(diǎn),就領(lǐng)會(huì)了面向?qū)ο蟮乃季S方法。

      舉一個(gè)非常簡(jiǎn)單的例子:假使現(xiàn)在需要寫(xiě)一個(gè)網(wǎng)頁(yè)計(jì)數(shù)器,客戶訪問(wèn)一次頁(yè)面,網(wǎng)頁(yè)計(jì)數(shù)器加1,計(jì)數(shù)器是這樣來(lái)訪問(wèn)的后臺(tái)有一個(gè)數(shù)據(jù)庫(kù)表,保存每個(gè)id(一個(gè)id對(duì)應(yīng)一個(gè)被統(tǒng)計(jì)訪問(wèn)次數(shù)的頁(yè)面)的計(jì)數(shù)器當(dāng)前值,請(qǐng)求頁(yè)面一次,對(duì)應(yīng)id的計(jì)數(shù)器的字段加1(這里我們忽略并發(fā)更新數(shù)據(jù)庫(kù)

      表,出現(xiàn)的表鎖定的問(wèn)題)。

      如果按照一般從程序?qū)崿F(xiàn)的角度來(lái)分析,我們會(huì)這樣考慮:首先是從HTTP GET請(qǐng)求取到id,然后按照id查數(shù)據(jù)庫(kù)表,獲得某id對(duì)應(yīng)的訪問(wèn)計(jì)數(shù)值,然后加1,更新數(shù)據(jù)庫(kù),最后向頁(yè)面顯示訪問(wèn)計(jì)數(shù)。

      現(xiàn)在假設(shè)一個(gè)沒(méi)有程序設(shè)計(jì)經(jīng)驗(yàn)的人,他會(huì)怎樣來(lái)思考這個(gè)問(wèn)題的呢?他會(huì)提出什么樣的需求呢?他很可能會(huì)這樣想:

      我需要有一個(gè)計(jì)數(shù)器,這個(gè)計(jì)數(shù)器應(yīng)該有這樣的功能,刷新一次頁(yè)面,訪問(wèn)量就會(huì)加1,另外最好還有一個(gè)計(jì)數(shù)器清0的功能,當(dāng)然計(jì)數(shù)器如果有一個(gè)可以設(shè)為任意值的功能的話,我就可以作弊了。

      做為一個(gè)沒(méi)有程序設(shè)計(jì)經(jīng)驗(yàn)的人來(lái)說(shuō),他完全不會(huì)想到對(duì)數(shù)據(jù)庫(kù)應(yīng)該如何操作,對(duì)于HTTP變量該如何傳遞,他考慮問(wèn)題的角度就是我有什么需求,我的業(yè)務(wù)邏輯是什么,軟件應(yīng)該有什么功能。

      按照這樣的思路(請(qǐng)注意,他的思路其實(shí)就是我們平時(shí)在生活中習(xí)慣的思維方式),我們知道需要有一個(gè)計(jì)數(shù)器類(lèi) Counter,有一個(gè)必須的和兩個(gè)可選的方法:

      getCount()// 取計(jì)數(shù)器值方法

      resetCounter()// 計(jì)數(shù)器清0方法

      setCount()// 設(shè)計(jì)數(shù)器為相應(yīng)的值方法

      把Counter類(lèi)完整的定義如下:

      public class Counter {

      public int getCount(int id){}

      public void resetCounter(int id){}

      public void setCount(int id, int currentCount){}

      }

      解決問(wèn)題的框架已經(jīng)有了,來(lái)看一下如何使用Counter。在count.cgi里面調(diào)用Counter來(lái)計(jì)數(shù),程序片斷如下:

      // 這里從HTTP環(huán)境里面取id值

      ...Counter myCounter = new Counter();// 獲得計(jì)數(shù)器

      int currentCount = myCounter.getCount(id);// 從計(jì)數(shù)器中取計(jì)數(shù)

      // 這里向客戶瀏覽器輸出

      ...程序的框架全都寫(xiě)好了,剩下的就是實(shí)現(xiàn)Counter類(lèi)方法里面具體的代碼了,此時(shí)才去考慮具體的程序語(yǔ)言實(shí)現(xiàn)的細(xì)節(jié),比如,在getCount()方法里面訪問(wèn)數(shù)據(jù)庫(kù),更新計(jì)數(shù)

      值。

      從上面的例子中看到,面向?qū)ο蟮乃季S方法其實(shí)就是我們?cè)诂F(xiàn)實(shí)生活中習(xí)慣的思維方式,是從人類(lèi)考慮問(wèn)題的角度出發(fā),把人類(lèi)解決問(wèn)題的思維方式逐步翻譯成程序能夠理解的思維方式的過(guò)程,在這個(gè)翻譯的過(guò)程中,軟件也就逐步被設(shè)計(jì)好了。

      在運(yùn)用面向?qū)ο蟮乃季S方法進(jìn)行軟件設(shè)計(jì)的過(guò)程中,最容易犯的錯(cuò)誤就是開(kāi)始分析的時(shí)候,就想到了程序代碼實(shí)現(xiàn)的細(xì)節(jié),因此封裝的類(lèi)完全是基于程序?qū)崿F(xiàn)邏輯,而不是基于解決問(wèn)題的業(yè)務(wù)邏輯。

      學(xué)習(xí)JDBC編程的經(jīng)典錯(cuò)誤問(wèn)法是:“我怎樣封裝對(duì)數(shù)據(jù)庫(kù)的select操作?”

      面向?qū)ο蟮脑O(shè)計(jì)是基于解決業(yè)務(wù)問(wèn)題的設(shè)計(jì),而不是基于具體編程技術(shù)的設(shè)計(jì)。我不會(huì)去封裝select語(yǔ)句的,我只封裝解決問(wèn)題的業(yè)務(wù)邏輯,對(duì)數(shù)據(jù)庫(kù)的讀取是在業(yè)務(wù)邏輯的編碼實(shí)現(xiàn)階段才去考慮的問(wèn)題。

      回過(guò)頭看上面那個(gè)發(fā)廣告郵件的例子,應(yīng)該如何應(yīng)用面向?qū)ο蟮乃季S方法呢?

      對(duì)于一個(gè)郵件來(lái)說(shuō),有郵件頭,郵件體,和郵件地址這三個(gè)屬性,發(fā)送郵件,需要一個(gè)發(fā)送的方法,另外還需要一個(gè)能把所有郵件地址列出來(lái)的方法。所以應(yīng)該如下設(shè)計(jì):

      類(lèi)JunkMail

      屬性:

      head

      body

      address

      方法:

      sendMail()// 發(fā)送郵件

      listAllMail()// 列郵件地址

      用Java來(lái)表示:

      public class JunkMail {

      private String head;

      private String body;

      private String address;

      public JunkMain(){ // 默認(rèn)的類(lèi)構(gòu)造器

      // 從外部配置文件讀郵件頭和郵件體

      this.head=...;

      this.body=...;

      }

      public static boolean sendMail(String address){

      // 調(diào)用qmail,發(fā)送email

      }

      public static Collection listAllMail(){

      // 訪問(wèn)數(shù)據(jù)庫(kù),返回一個(gè)郵件地址集合}

      }

      當(dāng)把JunkMail設(shè)計(jì)好了以后,再調(diào)用JunkMail類(lèi)完成郵件的發(fā)送,將是非常輕松的事情。

      如果說(shuō)傳統(tǒng)的面向過(guò)程的編程是符合機(jī)器運(yùn)行指令的流程的話,那么面向?qū)ο蟮乃季S方法就是符合現(xiàn)實(shí)生活中人類(lèi)解決問(wèn)題的思維過(guò)程。

      在面向?qū)ο蟮能浖治龊驮O(shè)計(jì)的時(shí)候,要提醒自己,不要一上來(lái)就去想程序代碼的實(shí)現(xiàn),應(yīng)該拋開(kāi)具體編程語(yǔ)言的束縛,集中精力分析我們要實(shí)現(xiàn)的軟件的業(yè)務(wù)邏輯,分析軟件的業(yè)務(wù)流程,思考應(yīng)該如何去描述和實(shí)現(xiàn)軟件的業(yè)務(wù)。畢竟軟件只是一個(gè)載體,業(yè)務(wù)才是我們真正要實(shí)現(xiàn)的目標(biāo)。

      但是在設(shè)計(jì)過(guò)程中,心里卻往往在擔(dān)心,如果我完全不去考慮程序代碼的實(shí)現(xiàn)的話,那么我怎么知道我的設(shè)計(jì)一定合理呢?我怎么知道我設(shè)計(jì)的類(lèi)、接口一定可以實(shí)現(xiàn)呢?所以經(jīng)??梢钥吹降默F(xiàn)象就是:

      在設(shè)計(jì)過(guò)程中,雖然知道不能過(guò)早考慮代碼實(shí)現(xiàn),但是每設(shè)計(jì)一個(gè)類(lèi),一個(gè)接口,心里都要不知不覺(jué)的用自己熟悉的編程語(yǔ)言大概的評(píng)估一下,看看能否編出來(lái),因此,一不小心,就會(huì)又回到按照程序功能實(shí)現(xiàn)的思路進(jìn)行設(shè)計(jì)的老路上去了。

      舉個(gè)例子來(lái)說(shuō)明,在做Web程序設(shè)計(jì)的時(shí)候,經(jīng)常要遇到分頁(yè)顯示數(shù)據(jù)的情況。比如說(shuō)需要把系統(tǒng)中所有的用戶都列出來(lái)這樣的功能。假設(shè)使用User類(lèi)來(lái)表示用戶,增加用戶addUser(),刪除用戶deleteUser(),查詢所有用戶listUsers()方法。而數(shù)據(jù)庫(kù)中有一個(gè)user表,一條記錄是一個(gè)用戶的信息。下面考慮一下User類(lèi)的方法的實(shí)現(xiàn):

      addUser()和deleteUser()方法都好實(shí)現(xiàn),就是對(duì)數(shù)據(jù)庫(kù)增加記錄和刪除記錄。對(duì)于listUsers()方法,其實(shí)就是對(duì)user表的select,取出一個(gè)記錄集。但是該怎么從listUsers()方法中得到所有用戶的列表呢?

      一個(gè)方法調(diào)用的返回值只有一個(gè),沒(méi)有多個(gè),所以很多情況下采用的辦法就是返回值定義為集合類(lèi)型,比如Vector。這樣就可以在listUsers()方法的具體代碼實(shí)現(xiàn)的時(shí)候,從數(shù)據(jù)庫(kù)依次取出一個(gè)個(gè)記錄,插入到Vector里面來(lái)。在主程序里面,調(diào)用listUsers()方法可以返回一個(gè)Vector,然后再對(duì)Vector遍歷操作,就可以得到用戶列表了。

      public class User {

      public static void addUser(...){

      // 數(shù)據(jù)庫(kù)insert一條記錄

      }

      public static void deleteUser(...){

      // 數(shù)據(jù)庫(kù)delete一條記錄

      }

      public Vector listUsers(...){

      // 數(shù)據(jù)庫(kù)select結(jié)果放到一個(gè)集合里面

      }

      }

      這樣的設(shè)計(jì)基本合理,但是仍然有點(diǎn)小問(wèn)題。因?yàn)樵谠O(shè)計(jì)的時(shí)候,就考慮到了用Java的集合類(lèi)Vector來(lái)實(shí)現(xiàn)對(duì)不定長(zhǎng)數(shù)據(jù)集的存放,因而違反了面向?qū)ο笤O(shè)計(jì)的一個(gè)原則:在設(shè)計(jì)的時(shí)候不應(yīng)過(guò)早的考慮具體程序語(yǔ)言的實(shí)現(xiàn)。所以必須用抽象的方法,和具體實(shí)現(xiàn)無(wú)關(guān)的方法來(lái)表達(dá)業(yè)務(wù)邏輯。

      我們知道,通常對(duì)具有集合特征的數(shù)據(jù)結(jié)構(gòu)進(jìn)行遍歷通常可以使用next和hasNext方法,next實(shí)現(xiàn)取下一個(gè)用戶,hasNext判斷是否還有元素。因此我們定義一個(gè)接口Iterator,這個(gè)接口中定義兩個(gè)方法next和hasNext:

      public interface Iterator {

      public boolean hasNext(){}

      public Object next(){}

      }

      而User類(lèi)的listUses方法返回值改為Iterator接口的實(shí)現(xiàn)類(lèi):

      public class User {

      ...public Iterator listUsers(){

      }

      ...}

      這樣就把User類(lèi)的設(shè)計(jì)和具體的實(shí)現(xiàn)方法分離開(kāi)了,因?yàn)榇藭r(shí)任何實(shí)現(xiàn)了next()和hasNext()方法的類(lèi)都可以做為listUsers的返回值,都可以被用來(lái)表達(dá)“用戶列表”,而不僅僅可以使用Vector而已。比如,我可以用ArrayList來(lái)表達(dá)用戶列表,因?yàn)锳rrayList也實(shí)現(xiàn)了Iterator,當(dāng)然我也可以自己專(zhuān)門(mén)寫(xiě)一個(gè)類(lèi)來(lái)存放用戶列表,只要實(shí)現(xiàn)next()和hasNext()方法就行了。

      這樣在具體的編寫(xiě)代碼的時(shí)候,程序員具有了最大的靈活性,可以根據(jù)具體的情況,采用不同的編程方法來(lái)存放用戶列表。特別是降低了程序的耦合度,提高了程序的可移植性。對(duì)于上面那個(gè)JunkMail的listAllMail()方法也同樣應(yīng)該改為接口類(lèi)型。

      然后,在主程序里面就這樣來(lái)使用User類(lèi)的listUsers方法:

      User myUser = new User();

      Iterator iterator = myUser.listUsers();

      while(iterator.hasNext()){

      iterator.next();

      }

      這樣就可以完全不用考慮程序代碼實(shí)現(xiàn)了,從高層次上把功能抽象出來(lái),定義成為接口,同時(shí)又可以把系統(tǒng)設(shè)計(jì)的很合理,完全根據(jù)業(yè)務(wù)的需求來(lái)進(jìn)行設(shè)計(jì)。

      結(jié)語(yǔ)

      通過(guò)上面的幾個(gè)例子的設(shè)計(jì)說(shuō)明,使用面向?qū)ο蟮乃季S方法,其實(shí)是一個(gè)把業(yè)務(wù)邏輯從具體的編程技術(shù)當(dāng)中抽象出來(lái)的過(guò)程,而這個(gè)抽象的過(guò)程是自上而下的,非常符合人類(lèi)的思維習(xí)慣,也就是先不考慮問(wèn)題解決的細(xì)節(jié),把問(wèn)題的最主要的方面抽象成為一個(gè)簡(jiǎn)單的框架,集中精力思考如何解決主要矛盾,然后在解決問(wèn)題的過(guò)程中,再把問(wèn)題的細(xì)節(jié)分割成一個(gè)一個(gè)小問(wèn)題,再專(zhuān)門(mén)去解決細(xì)節(jié)問(wèn)題。

      因而一旦牢牢的抓住了這一點(diǎn),你就會(huì)發(fā)現(xiàn)在軟件設(shè)計(jì)和開(kāi)發(fā)過(guò)程中,你自己總是會(huì)不知不覺(jué)的運(yùn)用面向?qū)ο蟮乃季S方法來(lái)設(shè)計(jì)和編寫(xiě)程序,并且程序的設(shè)計(jì)和開(kāi)發(fā)也變得不再那么枯燥,而一個(gè)合理運(yùn)用面向?qū)ο蠹夹g(shù)進(jìn)行設(shè)計(jì)和架構(gòu)的軟件,更是具備了思維的藝術(shù)美感。

      最后,愿面向?qū)ο蟮乃季S方法也能給您的程序設(shè)計(jì)之路帶來(lái)創(chuàng)作的樂(lè)趣。

      第四篇:《面向?qū)ο蟪绦蛟O(shè)計(jì)》教學(xué)大綱

      《面向?qū)ο蟪绦蛟O(shè)計(jì)》教學(xué)大綱

      課程名稱:信息內(nèi)容安全 課程代碼:042504 總 學(xué) 時(shí):64 學(xué)

      分:2

      課程類(lèi)型:專(zhuān)業(yè)必修課 適用專(zhuān)業(yè): 信息安全專(zhuān)業(yè) 制 訂 人:徐雪飛 審 定 人:肖

      文 制訂日期:2015年3月

      《面向?qū)ο蟪绦蛟O(shè)計(jì)》教學(xué)大綱

      一、課程性質(zhì)、目的和任務(wù)

      C#語(yǔ)言是.NET平臺(tái)上的核心開(kāi)發(fā)語(yǔ)言,具有簡(jiǎn)單易學(xué)、類(lèi)型安全、完全面向?qū)ο蟮忍匦裕且婚T(mén)面向現(xiàn)代軟件工程的主流程序設(shè)計(jì)語(yǔ)言。本課程系統(tǒng)地介紹C#語(yǔ)言的結(jié)構(gòu)化設(shè)計(jì)、面向?qū)ο?、泛型、商業(yè)開(kāi)發(fā)等功能要素,使學(xué)生在掌握程序設(shè)計(jì)的基本方法和技巧,培養(yǎng)利用計(jì)算機(jī)解決實(shí)際問(wèn)題的能力,以滿足專(zhuān)業(yè)課應(yīng)用和繼續(xù)學(xué)習(xí)的需要。

      二、教學(xué)基本要求

      通過(guò)學(xué)習(xí)本課程,要求學(xué)生能夠熟悉C#語(yǔ)言的語(yǔ)法和類(lèi)型系統(tǒng),掌握面向?qū)ο蟪绦蛟O(shè)計(jì)和泛型程序設(shè)計(jì)的基本方法,并具有商業(yè)應(yīng)用開(kāi)發(fā)的基本能力,能靈活地使用C#語(yǔ)言及Visual Studio.NET開(kāi)發(fā)環(huán)境解決一般性編程問(wèn)題。

      三、教學(xué)內(nèi)容

      1、緒論(教學(xué)2學(xué)時(shí),上機(jī)2學(xué)時(shí))

      教學(xué)內(nèi)容:

      (1).NET技術(shù)和框架結(jié)構(gòu)簡(jiǎn)介(2)C#語(yǔ)言概貌

      (3)面向?qū)ο蟮幕靖拍?/p>

      教學(xué)目的:使學(xué)生對(duì).NET平臺(tái)和C#有一個(gè)綜合性的了解。

      2、C#語(yǔ)法基礎(chǔ)(教學(xué)6學(xué)時(shí),上機(jī)4學(xué)時(shí))

      教學(xué)內(nèi)容:(1)數(shù)據(jù)類(lèi)型(2)值和方法(3)表達(dá)式(4)控制語(yǔ)句

      教學(xué)目的:使學(xué)生基本掌握C#語(yǔ)言的類(lèi)型系統(tǒng)和基本語(yǔ)法結(jié)構(gòu)。

      3、類(lèi)和繼承(教學(xué)4學(xué)時(shí),上機(jī)4學(xué)時(shí))

      教學(xué)內(nèi)容:

      (1)類(lèi)的數(shù)據(jù)成員和各種函數(shù)成員(2)繼承和多態(tài)(3).NET常用類(lèi)型(4)接口與實(shí)現(xiàn)

      教學(xué)目的:使學(xué)生進(jìn)一步掌握類(lèi)型的定義和使用方法,掌握.NET類(lèi)庫(kù)中一些典型類(lèi)的用法;深入理解繼承和多態(tài)性的概念,從而掌握面向?qū)ο筌浖芍赜眯缘年P(guān)鍵技術(shù)。

      4、Windows窗體界面(教學(xué)2學(xué)時(shí),上機(jī)2學(xué)時(shí))

      教學(xué)內(nèi)容:

      (1)Windows Form編程技術(shù)(2)WPF編程技術(shù)

      (3)繪圖、動(dòng)畫(huà)和媒體 教學(xué)目的:使學(xué)生掌握Windows程序界面設(shè)計(jì)的基本要素,能夠使用Windows Form和WPF編程技術(shù)開(kāi)發(fā)交互式圖形界面應(yīng)用程序。

      5、泛型(教學(xué)4學(xué)時(shí),上機(jī)2學(xué)時(shí))

      教學(xué)內(nèi)容:

      (1)泛型的定義與使用(2)元組和可空類(lèi)型的用法(3)泛型集合與循環(huán)遍歷

      (4)匿名方法和Lambda表達(dá)式

      教學(xué)目的:使學(xué)生掌握泛型程序設(shè)計(jì)的基本概念,能夠利用類(lèi)型抽象和操作抽象開(kāi)發(fā)出高可適的軟件程序。

      6、異常處理(教學(xué)1學(xué)時(shí))

      教學(xué)內(nèi)容:

      (1)C#異常處理結(jié)構(gòu)

      (2)主動(dòng)引發(fā)異常和自定義異常

      教學(xué)目的:使學(xué)生能夠通過(guò)異常處理來(lái)提高程序可靠性。

      7、文件操作(教學(xué)1學(xué)時(shí),上機(jī)1學(xué)時(shí))

      教學(xué)內(nèi)容:

      (1)驅(qū)動(dòng)器、目錄和文件(2)文件流和數(shù)據(jù)流

      教學(xué)目的:使學(xué)生掌握在C#程序中進(jìn)行磁盤(pán)文件存取的基本技術(shù)。

      8、數(shù)據(jù)庫(kù)訪問(wèn)(教學(xué)2學(xué)時(shí),上機(jī)1學(xué)時(shí))

      教學(xué)內(nèi)容:

      (1)ADO.NET聯(lián)機(jī)數(shù)據(jù)訪問(wèn)(2)ADO.NET脫機(jī)數(shù)據(jù)訪問(wèn)

      教學(xué)目的:使學(xué)生掌握C#程序中進(jìn)行數(shù)據(jù)庫(kù)存取的基本技術(shù)。

      9、綜合練習(xí)(教學(xué)2學(xué)時(shí),上機(jī)8學(xué)時(shí))教學(xué)內(nèi)容:

      (1)進(jìn)程和線程

      (2)ASP.NET網(wǎng)絡(luò)程序設(shè)計(jì)

      (3)采用案例驅(qū)動(dòng)的方式,綜合運(yùn)用C#編程技術(shù)開(kāi)發(fā)較為完整的軟件程序。教學(xué)目的:提高學(xué)生軟件設(shè)計(jì)的綜合能力。

      五、教學(xué)方法與手段

      講授法、討論法、多媒體教學(xué)、實(shí)驗(yàn)教學(xué)。

      六、考核方式

      考試成績(jī)占70%,平時(shí)成績(jī)占30%。閉卷考試。

      七、推薦教材和教學(xué)參考書(shū)

      材:《C#程序設(shè)計(jì)基礎(chǔ)》第3版,鄭宇軍,石海鶴,王衛(wèi)紅,清華大學(xué)出版社,2014年。參考書(shū):

      1、《C#應(yīng)用開(kāi)發(fā)與實(shí)踐》,曾憲權(quán)、李梅蓮 等,清華大學(xué)出版社,2015年

      2、《C#編程實(shí)戰(zhàn)寶典》,付強(qiáng)、丁寧 等,清華大學(xué)出版社,2014年。

      第五篇:面向?qū)ο蟪绦蛟O(shè)計(jì)教學(xué)大綱

      面向?qū)ο蟪绦蛟O(shè)計(jì)(專(zhuān)業(yè)限選課)Object-Oriented Programming 【課程編號(hào)】XZ26175 【學(xué)分?jǐn)?shù)】3 【學(xué)時(shí)數(shù)】60=38+22

      【課程類(lèi)別】專(zhuān)業(yè)限選 【編寫(xiě)日期】2010.3.30 【先修課程】C語(yǔ)言程序設(shè)計(jì)、計(jì)算機(jī)應(yīng)用基礎(chǔ)

      【適用專(zhuān)業(yè)】通信工程

      一、教學(xué)目的、任務(wù)

      通過(guò)學(xué)習(xí),使學(xué)生深刻理解和領(lǐng)會(huì)面向?qū)ο蟮幕舅枷牒突咎卣鳎莆彰嫦驅(qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言C++語(yǔ)言的基本概念、基本語(yǔ)法以及面向?qū)ο蟪绦蛟O(shè)計(jì)的基本方法;使學(xué)生養(yǎng)成面向?qū)ο蟮木幊趟季S習(xí)慣。

      二、課程教學(xué)的基本要求

      1.理解面向?qū)ο蟮幕靖拍詈褪褂妹嫦驅(qū)ο蠹夹g(shù)進(jìn)行程序設(shè)計(jì)的基本思想 2.能比較熟練地用C++語(yǔ)言進(jìn)行一般面向?qū)ο蟮某绦蛟O(shè)計(jì)

      3.初步掌握面向?qū)ο缶幊汰h(huán)境Visual C++的使用

      三、教學(xué)內(nèi)容和學(xué)時(shí)分配(2 + 5 + 14 + 9 + 12 + 7 + 6 + 5 = 60)第一章 面向?qū)ο蟪绦蛟O(shè)計(jì)概述 2 學(xué)時(shí)(課堂講授學(xué)時(shí)2)主要內(nèi)容:

      1.什么是面向?qū)ο蟪绦蛟O(shè)計(jì) 2.對(duì)象與類(lèi) 3.封裝 4.繼承性 5.多態(tài)性

      6.面向?qū)ο蟪绦蛟O(shè)計(jì)的語(yǔ)言 教學(xué)要求:

      了解什么是面向?qū)ο蟪绦蛟O(shè)計(jì);掌握對(duì)象和類(lèi)的基本概念;理解面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特征。其它教學(xué)環(huán)節(jié):

      安排課外了解面向?qū)ο蟪绦蛟O(shè)計(jì)方面的基本概念。第二章 C++概述 5學(xué)時(shí)(課堂講授學(xué)時(shí)2+課程實(shí)驗(yàn)學(xué)時(shí)3)主要內(nèi)容:

      1.C++的起源和特點(diǎn) 2.C++源程序的構(gòu)成

      3.C++在非面向?qū)ο蠓矫娴囊恍┨匦?教學(xué)要求:

      cin和cout的使用;new和delete的運(yùn)算符的使用;函數(shù)的重載;帶缺省參數(shù)的函數(shù);引用; VC++的使用。其它教學(xué)環(huán)節(jié):

      實(shí)驗(yàn)1: C++程序設(shè)計(jì)基礎(chǔ)練習(xí)。實(shí)驗(yàn)?zāi)康暮鸵螅?/p>

      1.掌握C++程序的基本格式和規(guī)范,學(xué)會(huì)編寫(xiě)簡(jiǎn)單的C++程序。2.掌握C++程序結(jié)構(gòu)的特點(diǎn)。

      3.熟悉C++程序基本的輸入輸出操作。

      4.掌握C++數(shù)據(jù)類(lèi)型常量和變量以及修飾符的使用方法。5.熟悉作用域運(yùn)算符的功能和基本使用方法。6.掌握C++內(nèi)存的動(dòng)態(tài)分配和釋放方法。7.理解引用的概念,掌握引用的使用方法。

      第三章 類(lèi)和對(duì)象 14學(xué)時(shí)(課堂講授學(xué)時(shí)8+課程實(shí)驗(yàn)學(xué)時(shí)6)主要內(nèi)容:

      1.類(lèi)與對(duì)象的基本概念 2.構(gòu)造函數(shù)與析構(gòu)函數(shù) 3.對(duì)象數(shù)組與對(duì)象指針 4.向函數(shù)傳遞對(duì)象 5.靜態(tài)成員 6.友元

      7.類(lèi)對(duì)象作為成員 8.常類(lèi)型 教學(xué)要求:

      類(lèi)的聲明;對(duì)象定義;對(duì)象的成員的訪問(wèn)。訪問(wèn)屬性的理解和運(yùn)用;構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義;對(duì)象數(shù)組的定義和使用;this的指針的理解和使用;類(lèi)的成員類(lèi)型為其他類(lèi)時(shí)如何理解和使用;靜態(tài)成員的理解和運(yùn)用。提供友元機(jī)制的目的;友元聲明方法;提供常類(lèi)型機(jī)制的目的;各種不同的常類(lèi)型運(yùn)作方式。其它教學(xué)環(huán)節(jié):

      實(shí)驗(yàn)2:類(lèi)和對(duì)象。實(shí)驗(yàn)?zāi)康暮鸵螅?/p>

      1.掌握類(lèi)、類(lèi)的數(shù)據(jù)成員、類(lèi)的成員函數(shù)的定義方式。2.理解類(lèi)成員的訪問(wèn)控制方式。

      3.掌握對(duì)象的定義和操作對(duì)象的方法。

      4.理解構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義與執(zhí)行過(guò)程。5.掌握重載構(gòu)造函數(shù)的方法。6.了解拷貝構(gòu)造函數(shù)的方法。實(shí)驗(yàn)3:對(duì)象數(shù)組和對(duì)象指針。實(shí)驗(yàn)?zāi)康暮鸵螅?/p>

      1.掌握對(duì)象數(shù)組的定義和使用方法。

      2.理解對(duì)象指針的概念,學(xué)會(huì)用指針引用對(duì)象。3.了解this指針的工作方式。

      4.掌握靜態(tài)數(shù)據(jù)成員和靜態(tài)成員函數(shù)的基本使用方法。5.理解友元與友元函數(shù)的作用,掌握其使用方法。

      第四章 派生類(lèi)和繼承 9學(xué)時(shí)(課堂講授學(xué)時(shí)6+課程實(shí)驗(yàn)學(xué)時(shí)3)主要內(nèi)容:

      1.派生類(lèi)的概念

      2.派生類(lèi)的構(gòu)造函數(shù)和析構(gòu)函數(shù) 3.基類(lèi)成員的訪問(wèn) 4.多重繼承 5.賦值兼容規(guī)則 教學(xué)要求:

      基類(lèi)和派生類(lèi)的基本概念;繼承成員的訪問(wèn)規(guī)則;派生類(lèi)構(gòu)造函數(shù)和析構(gòu)函數(shù)的運(yùn)行規(guī)則;多重繼承的基本概念;多重繼承中同名二義性如何消除;引入虛基類(lèi)的目的;繼承類(lèi)和派生類(lèi)之間相互賦值規(guī)則用。

      其它教學(xué)環(huán)節(jié):

      實(shí)驗(yàn)4:派生類(lèi)與繼承。實(shí)驗(yàn)?zāi)康暮鸵螅?/p>

      1.理解類(lèi)的繼承的概念,能夠定義和使用類(lèi)的繼承關(guān)系。2.掌握派生類(lèi)的聲明和定義方法。

      3.掌握公有派生和私有派生的訪問(wèn)特性。4.學(xué)習(xí)虛基類(lèi)在解決問(wèn)題中的作用。

      第五章 多態(tài)性 12學(xué)時(shí)(課堂講授學(xué)時(shí)8+課程實(shí)驗(yàn)學(xué)時(shí)4)主要內(nèi)容:

      1.編譯時(shí)的多態(tài)性與運(yùn)行時(shí)的多態(tài)性 2.函數(shù)重載 3.運(yùn)算符重載 4.類(lèi)型轉(zhuǎn)換 5.虛函數(shù) 教學(xué)要求:

      多態(tài)的基本概念;實(shí)現(xiàn)運(yùn)算符重載的方法(成員函數(shù));實(shí)現(xiàn)運(yùn)算符重載的方法(友元函數(shù));靜態(tài)聯(lián)編和動(dòng)態(tài)聯(lián)編的基本概念;虛函數(shù)的作用;虛函數(shù)的運(yùn)用。其它教學(xué)環(huán)節(jié):

      實(shí)驗(yàn)5:虛函數(shù)和多態(tài)性。實(shí)驗(yàn)?zāi)康暮鸵螅?/p>

      1.理解編譯時(shí)的多態(tài)性和運(yùn)行時(shí)的多態(tài)性。2.掌握運(yùn)算符重載的基本方法。3.掌握虛函數(shù)的定義和使用方法。

      第六章 模板 7學(xué)時(shí)(課堂講授學(xué)時(shí)4+課程實(shí)驗(yàn)學(xué)時(shí)3)主要內(nèi)容:

      1.模板的概念

      2.函數(shù)模板與模板函數(shù) 3.類(lèi)模板和模板類(lèi) 教學(xué)要求:

      模板的基本概念;為什么要使用模板;函數(shù)模板和模板函數(shù)的基本概念;函數(shù)模板的聲明和使用;類(lèi)模板和模板類(lèi)的基本概念。其它教學(xué)環(huán)節(jié):

      實(shí)驗(yàn)6:函數(shù)模板與類(lèi)模板。實(shí)驗(yàn)?zāi)康暮鸵螅?/p>

      1.掌握函數(shù)模板及其聲明方法。2.掌握模板函數(shù)及其生成方法。3.學(xué)習(xí)類(lèi)模板的聲明與使用方法。

      第七章 C++的I/O流類(lèi)庫(kù) 6學(xué)時(shí)(課堂講授學(xué)時(shí)3+課程實(shí)驗(yàn)學(xué)時(shí)3)主要內(nèi)容:

      1.C++建立類(lèi)類(lèi)庫(kù)的目的 2.預(yù)定義類(lèi)型的輸入輸出

      3.用戶自定義類(lèi)型的輸入和輸出 教學(xué)要求:

      掌握在各種情況下的<<和>>運(yùn)算符的重載。其它教學(xué)環(huán)節(jié):

      實(shí)驗(yàn)7:I/O流類(lèi)庫(kù)。實(shí)驗(yàn)?zāi)康暮鸵螅?/p>

      1.掌握流及流類(lèi)庫(kù)的作用。

      2.掌握流類(lèi)庫(kù)中常用的類(lèi)及其成員函數(shù)的使用方法。3.掌握重載“<<”和“>>”的方法。

      4.掌握控制輸出寬度的函數(shù)width和setw。

      5.掌握函數(shù)setosflags和resetiosflags設(shè)置和恢復(fù)對(duì)齊方式、精度、大小寫(xiě)等。

      研究教學(xué)內(nèi)容 5學(xué)時(shí)(課程講解和討論學(xué)時(shí))

      程序綜合設(shè)計(jì):按照面向?qū)ο蟪绦蜷_(kāi)發(fā)的原則和方法,利用一個(gè)實(shí)例來(lái)講解面向?qū)ο蟪绦蛟O(shè)計(jì)的整個(gè)過(guò)程,然后要求學(xué)生根據(jù)自己的開(kāi)發(fā)經(jīng)驗(yàn)進(jìn)行分組討論,從而幫助學(xué)生進(jìn)一步理解和熟悉面向?qū)ο蟪绦蛟O(shè)計(jì)方法。

      四、教學(xué)重點(diǎn)、難點(diǎn)及教學(xué)方法

      重點(diǎn):類(lèi)和對(duì)象的基本概念;對(duì)象定義;對(duì)象的成員的訪問(wèn)。訪問(wèn)屬性的理解和運(yùn)用;構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義;對(duì)象數(shù)組的定義和使用;this的指針的理解和使用?;?lèi)和派生類(lèi)的基本概念;繼承成員的訪問(wèn)規(guī)則;派生類(lèi)構(gòu)造函數(shù)和析構(gòu)函數(shù)的運(yùn)行規(guī)則。多態(tài)的基本概念;函數(shù)的重載。

      難點(diǎn):多重繼承;虛函數(shù);模板。

      教學(xué)方法:課堂授課采用多媒體教學(xué)和分組討論的方法,實(shí)驗(yàn)采用任務(wù)驅(qū)動(dòng)方式。通過(guò)未來(lái)愿景描述和學(xué)以致用的方法來(lái)提高學(xué)生的學(xué)習(xí)興趣,通過(guò)分組交流和師生積極互動(dòng)的方式提高學(xué)生學(xué)習(xí)本門(mén)課程的學(xué)習(xí)能力。

      五、考核方式及成績(jī)?cè)u(píng)定方式:考試

      六、教材及參考書(shū)目

      推薦教材:

      [1] 《C++面向?qū)ο蟪绦蛟O(shè)計(jì)》,陳維興,林小茶,清華大學(xué)出版社,第2版,2004 參考書(shū):

      [1] 《C++面向?qū)ο蟪绦蛟O(shè)計(jì)習(xí)題解析與上機(jī)指導(dǎo)》,陳維興,清華大學(xué)出版社,2003 [2] 《C++程序設(shè)計(jì)基礎(chǔ)》,周靄如,電子工業(yè)出版社,2003 [3] 《C++語(yǔ)言程序設(shè)計(jì)》,鄭莉,清華大學(xué)出版社,2005 修(制)訂人: 審核人:

      2010年 3 月30

      下載學(xué)習(xí)心得《面向?qū)ο蟆穡ord格式文檔
      下載學(xué)習(xí)心得《面向?qū)ο蟆?doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦