當前位置:首頁 » 編程軟體 » 面向方法編程

面向方法編程

發布時間: 2022-07-04 07:57:50

⑴ 如何學習面向對象編程

盡管我們都是從OOP發展而來,事實上,真正的面向對象來自於OOD。沒有OOD的過程,就無法真正的面向對象。
書上那些小例子只不過是在展示「如何OOP」的手段,也就是在告訴大家「面向對象的語言有哪些特點」,而並沒有回答「什麼是面向對象」以及「為什麼要面向對象」。
事實上,這種小程序永遠也不能體現出「為什麼要面向對象」。面向對象與傳統的面向功能與面向數據的開發相比,最大的優勢在於業務邏輯的可重用性。傳統的開發最容易重用的是數據結構和底層代碼,而上面的調用代碼則很難重用,而面向對象則專注於如何另維護了業務邏輯的調用代碼更容易地被其它項目或是後繼項目使用。
同時,面向對象的開發也有利於提高可移植性。我前面說過,傳統的開發成果越是底層的代碼可重用性就越高,但如果牽涉到大量OS相關的內容時——比如GUI,則越是底層的調用就越難以移植,這就形成了一個矛盾。而面向對象的方法解決了調用代碼的可重用性,也就順帶提高了代碼的可移植性。

⑵ 面向方面編程的比較

為了說明更實用的使用 AOP 的方法,我們將創建一個應用程序,從名為 ContactService.Service 的 Web 服務接收 people對象的集合。在 .NET 開發中使用 Web 服務的最常見方法是調用返回 XML 的 Web 服務,該服務通過框架自動反序列化為一個對象。這些對象僅包含數據而不包含任何行為。在 .NET Framework 2.0 中,通過使用 partial 關鍵字並創建行為,能夠對這些自動代碼生成的對象添加功能。但是在一些 Web 服務或代理對象之間重用某個特定行為時仍然存在一個問題。如前所述,多數情況下,共享的公共行為將包含在一個抽象類中,其他所有類從該類繼承。但是,我們不能使 Web 服務對象繼承功能。藉此良機,通過這個問題說明 AOP 功能如何強大。
我們的應用程序用於顯示聯系人信息。最初它的用途是顯示信息,但是需要添加某些行為。為了查看代碼示例,我們需要創建一個稱為 TheAgileDeveloper.ContactService 的虛擬目錄。該目錄必須指向 TheAgileDeveloper.ContactService 項目在本地計算機上的位置。
注 通過 http://localhost/TheAgileDeveloper.ContactService 可以訪問此項目,這一點很重要。
圖 1. 應用程序屏幕快照。
應用程序有一個視圖,它是一個名為 MainForm 的 WinForm,用於顯示左側 ListView 中 Web 服務返回的聯系人對象。選定一個聯系人時,名字、姓氏和 Web 頁將顯示在右側的文本框中。載入 MainForm 時,它調用 ServiceManager 類來獲取聯系人信息。下列 ServiceManager 類乍看起來似乎沒有添加任何值,只不過在窗體和 Web 服務之間添加了另一層。但是,它的價值就在於提供了一個在 Web 服務中添加新功能的位置,而不用重復代碼。另一個優點是,它將 Web 服務的「足跡」抽象出來,並從整個應用程序中移除出去。
Public Class ServiceManager
Public Shared Function GetAllContacts() As ContactService.Contact()
Dim service As ContactService.Service = New ContactService.Service
Dim contacts() As ContactService.Contact = service.GetAllContacts
Return contacts
End Function
Public Shared Sub SaveContact(ByVal contact As ContactService.Contact)
Dim service As ContactService.Service = New ContactService.Service
service.SaveContact(contact)
End Sub
End Class
請查看 TheAgileDeveloper.Client 項目中的 Reference.vb 文件。它是在導入 ContactService 的 Web 引用時通過 wsdl.exe 創建的。它從 WSDL 自動生成以下 Contact 類。
'<remarks/>
<System.Xml.Serialization.XmlTypeAttribute(_
[Namespace]:=http://。。。。。/TheAgileDeveloper.ContactService/Service1 _ )> _
Public Class Contact
'<remarks/>
Public Id As Integer
'<remarks/>
Public FirstName As String
'<remarks/>
Public LastName As String
'<remarks/>
Public WebSite As String
End Class
注意,Contact對象只處理數據,而且我們不想以任何方式編輯該代碼,因為 wsdl.exe 會為我們自動生成,所以下一次生成時更改將丟失。我想引入行為,這樣就能夠通過調用名為 Save 的方法保存對象,這很容易通過一個混入 來完成。混入 是多繼承的翻版,只是它有局限性,例如只能混入介面實現。我們使用的 Encase 框架包含一個 Encaser 類,它負責接收並包裝一個對象。包裝對象的行為實際上意味著創建新的對象,在本例中就是新的 Contact 對象,它包含配置的混入和切點。
為了創建允許在 Contact對象上調用 Save 方法的混入,需要指定一個介面,我稱之為 ISavable。實際混入對象的就是 ISavable 介面。我們需要在另一個稱為 ContactSave 的新類中實現該介面。
Public Interface ISaveable
Sub Save()
End Interface
Public Class ContactSave
Implements ISavable
Public Contact As ContactService.Contact
Public Sub Save() Implements ISavable.Save
ServiceManager.SaveContact(Me.Contact)
End Sub
End Class
在我們的應用程序中,混入 Contact對象中 ContactSave 實現的適當位置是 ServiceManager。我們能夠混入這個行為,但是不更改任何客戶端代碼(即,MainForm),因為應用混入後,結合 Contact 和 ContactSave 的新 Contact對象仍然保持為最初的 Contact 類型。以下代碼是經過更改的 ServiceManager 的 GetAllContacts 方法,它處理混入行為。
Public Shared Function GetAllContacts() As ContactService.Contact()
Dim service As ContactService.Service = New ContactService.Service
Dim contacts() As ContactService.Contact = service.GetAllContacts
'//Wrap each contact object
For i As Integer = 0 To contacts.Length-1
'//Create a new instance of the
'//encaser responsible for wrapping our object
Dim encaser As encaser = New encaser
'//Add mixin instance of ContactSave
Dim saver As ContactSave = New ContactSave
encaser.AddMixin(saver)
'//Creates a new object with
'//Contact and ContactSave implementations
Dim wrappedObject As Object = encaser.Wrap(contacts(i))
'//Assign our new wrapped contact object
'//to the previous contact object
contacts(i) = DirectCast(wrappedObject, _
ContactService.Contact)
'//Notice the wrapped object is still the same type
'//Assign the new wrapped Contact object to
'//target field of the ContactSave mixed in
saver.Target = contacts(i)
Next
Return contacts
End Function

⑶ 什麼是面向對象的編程方法

面向對象編程(Object
Oriented
Programming,OOP,面向對象程序設計)是一種計算機編程架構。OOP
的一條基本原則是專計算機程序是由單個能夠起到子程序作用的單元或對象組合而成。OOP
達到了軟體工程的三個主要目標:重用性、靈活性和擴展屬性。為了實現整體運算,每個對象都能夠接收信息、處理數據和向其它對象發送信息。

⑷ 什麼是面向過程編程,什麼是面型對象編程

面向過程編程就是分析待解決的問題所涉及的步驟,然後通過函數來逐一把每一步驟實現。它是以事件(問題)為中心的。代表語言有C……
其實質是按照計算機處理問題的過程來進行程序設計:輸入——操作——輸出。這樣設計者需要變更思維的習慣來完成涉及工作。面向過程程序設計所具有的流的工作性質,試圖通過信息流及其轉換來認識系統,不僅加大了程序設計的難度,亦使得程序的可理解性比較差。這種程序設計思維同樣為軟體的後期維護升級或是修改留下了較大的麻煩——可復用性差。
面向過程程序設計方法一種普遍採用的優化方法是自上而下的程序設計思路。要求設計開始就得全面系統了解整個工程的架構。
面向對象程序設計將問題抽象成為若干對象組成。當然,建立對象目的是為了敘述某個對象在問題中的行為,而不是針對問題的某一具體步驟。代表語言:Java、C++……特點:繼承、封裝、多態。
為了更好地理解,下面引用別人的一個例子:
五子棋,面向過程的設計思路就是首先分析問題的步驟:1、開始游戲,2、黑子先走,3、繪制畫面,4、判斷輸贏,5、輪到白子,6、繪制畫面,7、判斷輸贏,8、返回步驟2,9、輸出最後結果。把上面每個步驟用分別的函數來實現,問題就解決了。而面向對象的設計則是從另外的思路來解決問題。整個五子棋可以分為 1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪制畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類對象(玩家對象)負責接受用戶輸入,並告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的i變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定。 可以明顯地看出,面向對象是以功能來劃分問題,而不是步驟。同樣是繪制棋局,這樣的行為在面向過程的設計中分散在了總多步驟中,很可能出現不同的繪製版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而面向對象的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一。 功能上的統一保證了面向對象設計的可擴展性。比如我要加入悔棋的功能,如果要改動面向過程的設計,那麼從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是面向對象的話,只用改動棋盤對象就行了,棋盤系統保存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規則判斷則不用顧及,同時整個對對象功能的調用順序都沒有變化,改動只是局部的。 再比如我要把這個五子棋游戲改為圍棋游戲,如果你是面向過程設計,那麼五子棋的規則就分布在了你的程序的每一個角落,要改動還不如重寫。但是如果你當初就是面向對象的設計,那麼你只用改動規則對象就可以了,五子棋和圍棋的區別不就是規則嗎?(當然棋盤大小好像也不一樣,但是你會覺得這是一個難題嗎?直接在棋盤對象中進行一番小改動就可以了。)而下棋的大致步驟從面向對象的角度來看沒有任何變化。 當然,要達到改動只是局部的需要設計的人有足夠的經驗,使用對象不能保證你的程序就是面向對象,初學者或者很蹩腳的程序員很可能以面向對象之虛而行面向過程之實,這樣設計出來的所謂面向對象的程序很難有良好的可移植性和可擴展性。

⑸ 編程作業:利用面向對象的方法編程實現如下結果輸出

/**
* @author Administrator
* 方法一
*/
public class Dog {
public Dog() {
// TODO Auto-generated constructor stub
}
public void meetMaster() {
// TODO Auto-generated method stub
System.out.println("聽主人的命令");
}
public void meetEnemy() {
// TODO Auto-generated method stub
System.out.println("狂叫,並沖上去狠咬");
}
public void meetFriend() {
// TODO Auto-generated method stub
System.out.println("晃動尾巴,表示歡迎");
}
public void meetFellow() {
// TODO Auto-generated method stub
System.out.println("嬉戲打鬧");
}
}
public class Main {
public static void main(String[] args) {
/**
* @author Administrator
* 方法一
*/
Dog dog = new Dog();
dog.meetMaster();
dog.meetEnemy();
dog.meetFriend();
dog.meetFellow();
}
}

/**

* 方法二
*/
public interface DogHabitInterface {
public void action();
}
public class DogMeetMaster implements DogHabitInterface{

@Override
public void action() {
// TODO Auto-generated method stub
System.out.println("聽主人的命令");
}

}
public class DogMeetEnemy implements DogHabitInterface{

@Override
public void action() {
// TODO Auto-generated method stub
System.out.println("狂叫,並沖上去狠咬");
}

}
public class DogMeetFriend implements DogHabitInterface{

@Override
public void action() {
// TODO Auto-generated method stub
System.out.println("晃動尾巴,表示歡迎");
}

}
public class DogMeetFellow implements DogHabitInterface{

@Override
public void action() {
// TODO Auto-generated method stub
System.out.println("嬉戲打鬧");
}

}
public class Main {
public static void main(String[] args) {

/**
* 方法二
*/
action(new DogMeetMaster());
action(new DogMeetEnemy());
action(new DogMeetFriend());
action(new DogMeetFellow());
}
static void action(DogHabitInterface dog){
dog.action();
}
}

⑹ 什麼叫面向對象編程

面向對象編程是一本書的名字,也是一門課程,上幾課就知道了。

⑺ 什麼是面向對象為什麼要用面向對象的方法來編程

面向對象分析屬於軟體開發過程中的問題定義階段,其目標是清晰、精確地定義問題領域。傳統的系統分析產生一組面向過程的文檔,定義目標系統的功能;面向對象分析則產生一種描述系統功能和問題領域的基本特徵的綜合文檔。 原則 面向對象分析的主要原則如下。 1.抽象 從許多事物中舍棄個別的、非本質的特徵,抽取共同的、本質性的特徵,就叫做抽象。抽象是形成概念的必須手段。 抽象原則有兩方面的意義:第一,盡管問題域中的事物是很復雜的,但是分析員並不需要了解和描述它們的一切,只需要分析研究其中與系統目標有關的事物及其本質性特徵。第二,通過舍棄個體事物在細節上的差異,抽取其共同特徵而得到一批事物的抽象概念。 抽象是面向對象方法中使用最為廣泛的原則。抽象原則包括過程抽象和數據抽象兩個方面。過程抽象是指,任何一個完成確定功能的操作序列,其使用者都可以把它看做一個單一的實體,盡管實際上它可能是由一系列更低級的操作完成的。數據抽象是指根據施加於數據之上的操作來定義數據類型,並限定數據的值只能由這些操作來修改和觀察。數據抽象是面向對象分析的核心原則。它強調把數據(屬性)和操作(服務)結合為一個不可分的系統單位(即對象),對象的外部只需要知道它做什麼,而不必知道它如何做。 2.封裝 封裝就是把對象的屬性和服務結合為一個不可分的系統單位,並盡可能隱蔽對象的內部細節。 3.繼承 特殊類的對象擁有的其一般類的全部屬性與服務,稱作特殊類對一般類的繼承。 在面向對象分析中運用繼承原則,就是在每個由一般類和特殊類形成的一般—特殊結構中,把一般類的對象實例和所有特殊類的對象實例都共同具有的屬性和服務,一次性地在一般類中進行顯式定義。在特殊類中不再重復地定義一般類中已定義的東西,但是在語義上,特殊類卻自動地、隱含地擁有它的一般類(以及所有更上層的一般類)中定義的全部屬性和服務。繼承原則的好處是:使系統模型比較簡練也比較清晰。 4.分類 就是把具有相同屬性和服務的對象劃分為一類,用類作為這些對象的抽象描述。分類原則實際上是抽象原則運用於對象描述時的一種表現形式。 5.聚合 聚合的原則是:把一個復雜的事物看成若干比較簡單的事物的組裝體,從而簡化對復雜事物的描述。 6.關聯 關聯是人類思考問題時經常運用的思想方法:通過一個事物聯想到另外的事物。能使人發生聯想的原因是事物之間確實存在著某些聯系。 7.消息通信 這一原則要求對象之間只能通過消息進行通信,而不允許在對象之外直接地存取對象內部的屬性。通過消息進行通信是由於封裝原則而引起的。在OOA中要求用消息連接表示出對象之間的動態聯系。 8.粒度控制 一般來講,人在面對一個復雜的問題域時,不可能在同一時刻既能縱觀全局,又能洞察秋毫。因此需要控制自己的視野:考慮全局時,注意其大的組成部分,暫時不詳察每一部分的具體的細節;考慮某部分的細節時則暫時撇開其餘的部分。這就是粒度控制原則。 9.行為分析 現實世界中事物的行為是復雜的。由大量的事物所構成的問題域中各種行為往往相互依賴、相互交織。 階段 面向對象分析過程可分為問題領域分析和應用分析兩個階段。 問題領域分析是軟體開發的基本組成部分,目的是使開發人員了解問題領域的結構,建立大致的系統實現環境。問題領域分析給出一組抽象概念(從高層來表示問題領域知識,常常超出當前應用的范圍)作為特定系統需求開發的參考。問題領域分析實際上是一種學習過程。軟體開發人員在這個階段應該盡可能地理解當前系統中與應用有關的知識,應該放開思維,放寬考慮的范圍,盡可能地標識與應用有關的概念。問題領域分析的邊界可能很模糊。有了廣泛的問題領域知識,涉及到具體的應用時,就可以更快地進入狀態,掌握應用的核心知識。而且,在用戶改變對目標系統的需求時,廣泛的分析可以幫助我們預測出目標系統在哪些方面會發生哪些變化。通常進行小組分析,小組成員可以包括領域專家和分析員等。在分析過程中,應該標識出系統的基本概念(對象、類、方法、關系等)、識別問題領域的特徵,並把這些概念集成到問題領域的模型中。問題領域的模型必須包含概念之間的關系,以及每個概念的全部信息。標識出來的相關概念應該根據信息內容來有機地融合到問題領域的綜合視圖中。 應用分析是依據在問題領域分析時建立起來的問題領域模型來進行的。應用分析時,把問題領域模型用於當前特定的應用之中。首先,通過收集到的用戶信息來對問題領域進行取捨,把用戶需求作為限制條件來使用,以縮減問題領域的信息量。因此,問題領域分析的視野大小直接影響到應用分析保留的信息量。一般來說,問題領域分析階段產生的模型並不需要用程序設計語言來表示,而應用分析階段產生的影響條件則需要用某種程序設計語言來表示。模型識別的要求可以針對一個應用,也可以針對多個應用。通常我們著重考慮兩個方面,即應用視圖和類視圖。在類視圖中,必須對每個類的屬性和操作進行細化,並表示出類之間的相互作用關系。 目標 Coad和Yourdon 認為,面向對象分析主要應該考慮與特定應用有關的對象,以及對象之間在結構和相互作用上的關系。在面向對象分析中,需要建立分析模型來描述系統的功能。 面向對象分析需要完成如下兩個任務: — 形式化地說明所面對的應用問題,最終成為軟體系統基本構成的對象,以及系統所必須遵從的、由應用環境所決定的規則和約束條件。 — 明確地規定構成系統的對象如何協同工作和完成指定的功能。 通過面向對象分析所建立的系統模型是以概念為中心的,因此稱為概念模型。概念模型由一組相關的類組成。面向對象分析可以通過自頂向下地逐層分解來建立系統模型,也可以自底向上地從已經定義的類出發,逐步構造新的類。概念模型的構造和評審由如下5個層次構成: — 類和對象層 — 屬性層 — 服務層 — 結構層 — 主題層 這5個層次不是構成軟體系統的層次,而是分析過程中的層次。也可以說是問題的不同側面。每個層次的工作都為系統的規格說明增加了一個組成部分。當5個層次的工作全部完成時,面向對象分析的任務也就完成了。 在實際操作中,面向對象分析的目標是得出問題領域的功能模型、對象模型和動態模型,並用相應的UML圖將它們表示出來。 步驟 面向對象分析通常按照下面的步驟來進行: (1)標識對象和類。可以從應用領域開始,逐步確定形成整個應用的基礎類和對象。這一步需要分析領域中目標系統的責任,調查系統的環境,從而確定對系統有用的類和對象。 (2)標識結構。典型的結構有兩種,即一般—特殊結構和整體—部分結構。一般—特殊結構表示一般類是基類,特殊類是派生類。比如,汽車是轎車和卡車的基類,這是一種一般—特殊結構。整體部分結構表示聚合,由屬於不同類的成員聚合成為新的類。比如,輪子、車體和汽車底盤都是汽車的一部分,這些不同功能的部件聚合成為汽車這個整體。 (3)標識屬性。對象所保存的信息稱為它的屬性。類的屬性描述狀態信息,在類的某個實例中,屬性的值表示該對象的狀態值。需要找出每個對象在目標系統中所需要的屬性,並將屬性安排在適當的位置,找出實例連接,最後再進行檢查。應該給出每個屬性的名字和描述,並指定該屬性所受的特殊限制(如只讀、屬性值限定在某個范圍之內等)。 (4)標識服務。對象收到消息後執行的操作稱為對象提供的服務。它描述了系統需要執行的處理和功能。定義服務的目的是為了定義對象的行為和對象之間的通信。其具體步驟包括: — 標識對象狀態 — 標識必要的服務 — 標識消息連接 — 描述服務 可以用類似於流圖的圖形來表示服務。 (5)標識主題。為了更好地理解包含大量類和對象的概念模型,需要標識主題,即對模型進行劃分,給出模型的整體框架,劃分出層次結構。可以按照如下步驟來標識主題。 — 識別主題 — 對主題進行改進和細化 — 將主題加入到分析模型 主題是一個與應用相關的概念,而不是人為任意引出來的,主題層的工作有助於理解分析的結果。 優點 面向對象分析的主要有點有: (1)加強了對問題域和系統責任的理解; (2)改進與分析有關的各類人員之間的交流; (3)對需求的變化具有較強的適應性; (4)支持軟體復用; (5)貫穿軟體生命周期全過程的一致性; (6)實用性; (7)有利於用戶參與.......

⑻ 什麼是面向對象編程方法

面向對象的程序設計(Object-Oriented Programming,簡記為OOP)立意於創建軟體重用代碼,具備更好地模擬現實世界環境的能力,這使它被公認為是自上而下編程的優勝者。它通過給程序中加入擴展語句,把函數「封裝」進編程所必需的「對象」中。面向對象的編程語言使得復雜的工作條理清晰、編寫容易。說它是一場革命,不是對對象本身而言,而是對它們處理工作的能力而言。對象並不與傳統程序設計和編程方法兼容,只是部分面向對象反而會使情形更糟。除非整個開發環境都是面向對象的,否則對象產生的好處還沒有帶來的麻煩多。

⑼ 用面向對象的方法編寫程序,求梯形面積

#include<iostream>
using namespace std;
class Ts{
public:
int up,low,h;
S()
{
double sum;
sum=(up+low)*h/2;
cout<<"梯形面積:"<<sum;
}
};
int main()
{
Ts s;//創建一個對象
cin>>s.up;//上底
cin>>s.low;//下底
cin>>s.h;//高
s.S();
return 0;
}

⑽ 面向對象、面向介面、面向方法編程的區別

其實不論是面向介面還是面向對象還是面向方面編程,只是設計模式的一種體現,用最簡單的話來解釋就是:

----------------------------------------------------------------------------

面向對象編程就是一堆對象,通過封裝、繼承、多態等更加有效的組織程序。
面向介面編程就是一堆介面,通過介面規約對象的屬性和方法,是面向對象一部分。

來源:(http://blog.sina.com.cn/s/blog_5396eb530100fkla.html) - 關於面向介面、面向對象、面向方面編程的比較區別_simoniu_新浪博客
面向方面編程把業務的主邏輯和次邏輯分開的一種思想。

面向對象不好解釋,可以理解為以一切元素都是對象,在設計時以對象為單位,考慮它的屬性及方法。設計中採用了封裝、繼承、抽象的手法
面向介面本身就是面向對象的,無所謂區別,只不過面向介面的好處是耦合性低
面向方面Aspect-Oriented Programming (AOP)就是大名鼎鼎的AOP。其實有點象struts里的攔截器。
舉例:假設有在一個應用系統中,有一個共享的數據必須被並發同時訪問,首先,將這個數據封裝在數據對象中,稱為Data Class,同時,將有多個訪問類,專門用於在同一時刻訪問這同一個數據對象。
為了完成上述並發訪問同一資源的功能,需要引入鎖Lock的概念,也就是說,某個時刻,當有一個訪問類訪問這個數據對象時,這個數據對象必須上鎖Locked,用完後就立即解鎖unLocked,再供其它訪問類訪問。 這種加鎖與解鎖的操作可以使用攔截器來實現。而攔截器本身就是面向方面編程的一個具體應用。

熱點內容
php數據類型轉換 發布:2024-04-25 14:15:17 瀏覽:750
windows調度演算法 發布:2024-04-25 14:14:28 瀏覽:456
下載喵星大作戰需要什麼配置 發布:2024-04-25 14:14:22 瀏覽:304
贛州伺服器數據存儲 發布:2024-04-25 14:13:41 瀏覽:889
控制演算法高手 發布:2024-04-25 13:57:10 瀏覽:472
文字游戲源碼php 發布:2024-04-25 13:57:08 瀏覽:881
安卓手機校準屏幕在哪裡 發布:2024-04-25 13:53:02 瀏覽:911
安卓app會閃退怎麼解決 發布:2024-04-25 13:48:44 瀏覽:644
阿里雲伺服器能用vmware嗎 發布:2024-04-25 13:33:23 瀏覽:732
1616源碼 發布:2024-04-25 13:33:19 瀏覽:81