面向對象演算法
Ⅰ 如何用面向對象編寫數據結構與演算法
《面向對象數據結構(C++版)》全面介紹了面向對象數據結構的基礎理論、演算法設計方法和具體應用,包括數據結構及演算法設計的基本概念、線性表、串、棧和隊列、數組和廣義表、樹和二叉樹、圖、查找、排序等內容,力求滿足計算機及相關專業本科教學的基本要求及培養目標。《面向對象數據結構(C++版)》採用面向對象C++語言描述數據結構和演算法,涉及內容全面豐富,重點突出,理論講述難度適中,演算法實踐淺顯易懂,例題習題豐富。《面向對象數據結構(C++版)》可作為高等院校計算機及相關專業本科及研究生面向對象數據結構課程教材,也可供從事計算機軟體開發和工程應用的技術人員參考。
Ⅱ 面向對象程序設計重點是演算法而不是數據嗎
法克。
演算法、數據都不是重點。
重點在於建立問題的模型和一些輔助的模型。
你只關心演算法和那幾個數據結構,你能寫出上億行的代碼!有一句話是這樣說的:當應用超過10萬行代碼,結構化設計思想(數據和演算法)就似乎不太適用了。
發明面向對象就是為了應付代碼膨脹所帶來的軟體復雜性。
面向對象的創始人阿倫·凱曾說一個一句很經典的話:
今天大部分的軟體都很像上百萬塊磚堆疊在一起組成的埃及金字塔,缺乏結構完整性,只能靠強力和成千上萬的奴隸完成。」
仔細品味這句話。。。。。。。。 人家很強調軟體的架構啊!
有些應用問題,演算法是解決不了的,一個人是解決不了的,因為這些問題的復雜性超出了單個人的能力(除了天才,但是天才是很少的),這些應用稱為工業級應用。需要啟用軟體開發團隊來完成。
「程序設計」 這個術語廣泛被人們用於指代編程,編程是設計嗎?演算法設計,這個是指你在設計一款新的演算法,還是在用別人發明的演算法?
Ⅲ 演算法,面向對象:二者有關系嗎我感覺編寫演算法程序用得大多是面向過程的思想,面向對象很少用到
演算法大部分是為了提高程序的效率,或者避免漏洞而設計的!C++本來就是面向對象的。感覺不到是因為接觸的太少了。什麼樣的演算法和是面向對象還是面向過程,是沒有什麼關系的。
Ⅳ 面向對象分析方法的步驟和特點
使用VC進行項目開發已經有一段時間了,在這段時間里感觸最深的就是自己對宏觀性面向對象分析方法的缺乏。面向對象分析是當今流行的系統分析方法之一,下面就談談在做項目的過程中我的一些小經驗。
在面對簡單系統時程序員可以很順利的提出問題的解決方案,並且一般情況下都是可行的。這是由於問題域關系簡單,所涉及到的內部構造、聯系比較容易解釋。而對於當前越來越復雜的系統,其問題域也就顯示的越來越復雜,而且內部的關系也不是很容易解釋,有些大的系統常常超出了人的解決問題的能力。在這種情況下,以往的面對過程的解決方法已經不能滿足日益增長的復雜系統分析的需要,在這種情況下,面向對象的分析方法就顯得尤為總要了。
在面向對象設計領域中,在橫向上把問題域分為數個不同的、低耦合、高內聚的問題域,而在縱向上又繼續分解各個不同的小的問題域,最後分解為葉節點問題域,從而解決問題。在面對對象分析方法中,用數個對象間的消息傳遞來完成整個問題。
下面看一看復雜系統的5個屬性:
1. 雜性經常是以層次的形式表現出來,復雜系統是由相互關聯的子系統組成,而這些子系統又是由他們各自的子系統構成,並由此類推到最底層的基本構件。
2. 對系統中最基本的構件的選擇是任意的,而且在很大程度上取決於系統觀察者的判斷力。
3. 一般而言,各構件內的連接總是要強於構件間的連接。在從構件的低頻動態中分離出高頻動態時,這一屬性是相當有用的。這是因為高頻動態涉及到各部件的內部結構,而低頻動態涉及到構件間的交互。
4. 層次系統通常都是由僅僅少數不同的子系統通過不同的排列組合方式組成。
5. 我們發現正運行的復雜系統總是由以前運行的簡單系統演化而來……任何胡亂湊合設計出來的復雜系統都不可能正常運轉,也不可能被修補好。我們必須由運行中的簡單系統開始。
對於第一點,正像我上面所說的那樣,系統是層次結構的。能夠給一個復雜的系統進行正確的層次分析,才能夠保證對系統的正確估計,包括可行性、可維護性、可擴展性……等等。而且對於日後對該系統進行維護(maintenance)、演化(evolution)、維持(preservation)都能夠很好的支持。
對於其中的第二點,強調了觀察者的判斷力,其實我認為其中也包括觀察者的身份角度。對於一個系統而言,觀察者並不是只進行分析設計的工程師,編碼階段的程序員,還應該包括用戶等所有這些同該系統有關的人員。作為不同的人員,對於系統就有不同的觀察點、觀察角度、身份等特殊因素。因此在不同身份的人(指參與者)甚至同一身份的人眼中說觀察到的系統特性都是不盡相同的。在大學里大家都接觸過透明性的概念,這就是不同觀察者所觀察角度不同的直觀反應。對於用戶來說,基本上底層的操作、演算法、通訊對於他們來說都是透明的,他們根本不用理會(其實也不知道)內部用了什麼。而對於一個負責某模塊的程序員來說就不會考慮其他模塊的實現,對於他們來說其他模塊是透明的,他們只需要負責管理好提供的模塊介面就OK了。
對於第三點,講的就是面對對象分析設計的方向,在面對對象分析設計系統時,被分解的各個模塊一定要做到高內聚、低耦合。有良好高內聚、低耦合系統常常會很容易維護,一個地方改動通常不需要牽扯到大的改動,維護行強。而且對於像VC程序這種更要求效率的程序來說,高內聚、低耦合也可以提高程序的運行期效率,應為對象內部的調用一般情況下會相比模塊間的調用佔用更少的執行時間,這樣將高頻動態封裝在一個對象內部就會一定程度上提高程序運行期執行效率。
第四點則說明了面向對象程序設計對程序設計可復用性的優點。在這點中所「層次系統由僅僅少數不同的子系統構成」那麼多數子系統在不同的復雜系統中都是能夠重復使用的。比如說建築一棟大廈和建築橋梁,雖然兩者都是復雜的系統,但是對於其結構中就會有很多相似甚至相同之處,沒有必要建築好大廈回頭建築橋梁的時候又要重新設計每一快磚瓦。
第五點提醒我們在系統設計時,盡量使用以往能夠正常運行的子系統來重新構件新的系統。這一點不僅說明第四點中的復用性,而且也說明了一個我們常常要犯的錯誤。就是將並沒有通過嚴格測試的子系統,匆忙的加入到大系統中,這樣做不利於對系統的基層,常常引入了其他錯誤,使得系統頻頻崩潰,最嚴重會導致系統的重新分析。
這是我對面向對象的一點心得體會,雖然我們大家在平時工作中所面對的問題、問題域不同,使用的開發工具不同,但是面向對象是一種思維方式,有利於分析、解決問題的一種方法,並不和任何語言掛鉤(當然語言對於面向對象特性的支持程度有所不同)。所以希望各位同事能夠盡量使用科學的方法分析解決問題,形成一種設計模式,以供大家互相交流。
軟體設計是一種藝術,也是一門工程學。
Ⅳ 面向對象的實現
(一)程序設計語言
⒈選擇面向對象語言
採用面向對象方法開發軟體的基本目的和主要優點是通過重用提高軟體的生產率。因此,應該優先選用能夠最完善、最准確地表達問題域語義的面向對象語言。
在選擇編程語言時,應該考慮的其他因素還有:對用戶學習面向對象分析、設計和編碼技術所能提供的培訓操作;在使用這個面向對象語言期間能提供的技術支持;能提供給開發人員使用的開發工具、開發平台,對機器性能和內存的需求,集成已有軟體的容易程度。
⒉程序設計風格
⑴提高重用性。
⑵提高可擴充性。
⑶提高健壯性。
(二)類的實現
在開發過程中,類的實現是核心問題。在用面向對象風格所寫的系統中,所有的數據都被封裝在類的實例中。而整個程序則被封裝在一個更高級的類中。在使用既存部件的面向對象系統中,可以只花費少量時間和工作量來實現軟體。只要增加類的實例,開發少量的新類和實現各個對象之間互相通信的操作,就能建立需要的軟體。
一種方案是先開發一個比較小、比較簡單的來,作為開發比較大、比較復雜的類的基礎。
⑴「原封不動」重用。
⑵進化性重用。
一個能夠完全符合要求特性的類可能並不存在。
⑶「廢棄性」開發。
不用任何重用來開發一個新類。
⑷錯誤處理。
一個類應是自主的,有責任定位和報告錯誤。
(三)應用系統的實現
應用系統的實現是在所有的類都被實現之後的事。實現一個系統是一個比用過程性方法更簡單、更簡短的過程。有些實例將在其他類的初始化過程中使用。而其餘的則必須用某種主過程顯式地加以說明,或者當作系統最高層的類的表示的一部分。
在C++和C中有一個main()函數,可以使用這個過程來說明構成系統主要對象的那些類的實例。
(四)面向對象測試
⑴演算法層。
⑵類層。
測試封裝在同一個類中的所有方法和屬性之間的相互作用。
⑶模板層。
測試一組協同工作的類之間的相互作用。
⑷系統層。
把各個子系統組裝成完整的面向對象軟體系統,在組裝過程中同時進行測試。
Ⅵ 面向對象方法的基本思想是什麼主要優勢有哪些
定義一:面向對象方法是一種運用對象、類、封裝、繼承、多態和消息等概念來構造、測試、重構軟體的方法。
定義二: 面向對象方法是以認識論為基礎,用對象來理解和分析問題空間,並設計和開發出由對象構成的軟體系統(解空間)的方法。 由於問題空間和解空間都是由對象組成的,這樣可以消除由於問題空間和求解空間結構上的不一致帶來的問題。簡言之,面向對象就是面向事情本身,面向對象的分析過程就是認識客觀世界的過程。
面向對象方法從對象出發,發展出對象,類,消息,繼承等概念。
面向對象方法的主要優點是:符合人們通常的思維方式;從分析到設計再到編碼採用一致的模型表示具有高度連續性;軟體重用性好。
Ⅶ 面向對象編程需要演算法嗎
面向過程 是將問題作為出發點的,以解決問題的過程和方式為主要編程思路,因此面向過程都是一些程序或者說函數的集合,數據和程序緊耦合在一起。面向對象:是以客觀事物作為出發點的,將一個事物的屬性和這個事物的行為結合在一起,也可以說是將一個事物的動態行為和靜態行為相結合聯系在一起。面向過程中重要的部分是演算法,面向對象的重要的過程是模式,所謂模式,就是類與類的組織結構,如經常說的設計模式,但是面向對象中的具體對象的靜態方法,就是面向過程的函數,只不過這種函數在使用數據,和作用域上有了對象領域特徵,即作用域的限制。所以從這個角度講,面向過程中的演算法在面向對象中是一種具體的表現,也需要演算法的支撐,而面向對象是從一個高層次的體系結構,組織對象之間關系,保證對象之間的耦合度(依賴程度)降低,以實現復用的目的。
Ⅷ "面向對象"通俗講是什麼意思
面向對象其實是現實世界模型的自然延伸。現實世界中任何實體都可以看作是對象。對象之間通過消息相互作用。另外,現實世界中任何實體都可歸屬於某類事物,任何對象都是某一類事物的實例。如果說傳統的面向過程式編程語言是以過程為中心以演算法為驅動的話,面向對象的編程語言則是以對象為中心以消息為驅動。用公式表示,過程式編程語言為:程序=演算法+數據;面向對象編程語言為:程序=對象+消息。
所有面向對象編程語言都支持三個概念:封裝、多態性和繼承,Java也不例外。現實世界中的對象均有屬性和行為,映射到計算機程序上,屬性則表示對象的數據,行為表示對象的方法(其作用是處理數據或同外界交互)。所謂封裝,就是用一個自主式框架把對象的數據和方法聯在一起形成一個整體。可以說,對象是支持封裝的手段,是封裝的基本單位。Java語言的封裝性較強,因為Java無全局變數,無主函數,在Java中絕大部分成員是對象,只有簡單的數字類型、字元類型和布爾類型除外。而對於這些類型,Java也提供了相應的對象類型以便與其他對象交互操作。
多態性就是多種表現形式,具體來說,可以用"一個對外介面,多個內在實現方法"表示。舉一個例子,計算機中的堆棧可以存儲各種格式的數據,包括整型,浮點或字元。不管存儲的是何種數據,堆棧的演算法實現是一樣的。針對不同的數據類型,編程人員不必手工選擇,只需使用統一介面名,系統可自動選擇。運算符重載(operator
overload)一直被認為是一種優秀的多態機制體現,但由於考慮到它會使程序變得難以理解,所以Java最後還是把它取消了。
繼承是指一個對象直接使用另一對象的屬性和方法。事實上,我們遇到的很多實體都有繼承的含義。例如,若把汽車看成一個實體,它可以分成多個子實體,如:卡車、公共汽車等。這些子實體都具有汽車的特性,因此,汽車是它們的"父親",而這些子實體則是汽車的"孩子"。Java提供給用戶一系列類(class),Java的類有層次結構,子類可以繼承父類的屬性和方法。與另外一些面向對象編程語言不同,Java只支持單一繼承。
Ⅸ 什麼叫做面向對象
面向對象(Object Oriented,OO)是軟體開發方法。面向對象的概念和應用已超越了程序設計和軟體開發,擴展到如資料庫系統、互動式界面、應用結構、應用平台、分布式系統、網路管理結構、CAD技術、人工智慧等領域。面向對象是一種對現實世界理解和抽象的方法,是計算機編程技術 發展到一定階段後的產物。
(9)面向對象演算法擴展閱讀
存在問題
1、軟體重用性差
重用性是指同一事物不經修改或稍加修改就可多次重復使用的性質。軟體重用性是軟體工程追求的目標之一。
2、軟體可維護性差
軟體工程強調軟體的可維護性,強調文檔資料的重要性,規定最終的軟體產品應該由完整、一致的配置成分組成。在軟體開發過程中,始終強調軟體的可讀性、可修改性和可測試性是軟體的重要的質量指標。實踐證明,用傳統方法開發出來的軟體,維護時其費用和成本仍然很高,其原因是可修改性差,維護困難,導致可維護性差。
3、不能滿足用戶需要
用傳統的結構化方法開發大型軟體系統涉及各種不同領域的知識,在開發需求模糊或需求動態變化的系統時,所開發出的軟體系統往往不能真正滿足用戶的需要。
參考資料來源:網路-面向對象
參考資料來源:網路-面向對象思想