❶ java中的OOA.OOD.OOP有什麼區別
一、指代不同
1、OOA:面向對象分析方法,是確定需求或者業務的角度,按照面向對象的思想來分析業務。
2、OOD:面向對象設計方法是OO方法中一個中間過渡環節。其主要作用是對OOA分析的結果作進一步的規范化整理,以便能夠被OOP直接接受。
3、OOP:面向對象程序設計作為一種新方法,其本質是以建立模型體現出來的抽象思維過程和面向對象的方法。
二、規則不同
1、OOA:只是對需求中描述的問題,進行模塊化的處理,描述問題的本質,區別每個問題的不同點相同點,確定問題中的對象。
2、OOD:是管理程序內部各部分的相互依賴。為了達到這個目標,OOD要求將程序分成塊,每個塊的規模應該小到可以管理的程度,然後分別將各個塊隱藏在介面(interface)的後面,只通過介面相互交流。
3、OOP:模型是用來反映現實世界中事物特徵的。任何一個模型都不可能反映客觀事物的一切具體特徵,只能對事物特徵和變化規律的一種抽象,且在所涉及的范圍內更普遍、更集中、更深刻地描述客體的特徵。
三、側重點不同
1、OOA:強調的是在系統調查資料的基礎上,針對OO方法所需要的素材進行的歸類分析和整理,而不是對管理業務現狀和方法的分析。
2、OOD:是一種解決軟體問題的設計範式(paradigm),一種抽象的範式。使用OOD這種設計範式,我們可以用對象(object)來表現問題領域(problem domain)的實體,每個對象都有相應的狀態和行為。
3、OOP:通過建立模型而達到的抽象是人們對客體認識的深化。
❷ 什麼是面向對象編程
它通過給程序中加入擴展語句,把函數「封裝」進編程所必需的「對象」中。面向對象的編程語言使得復雜的工作條理清晰、編寫容易。說它是一場革命,不是對對象本身而言,而是對它們處理工作的能力而言。對象並不與傳統程序設計和編程方法兼容,只是部分面向對象反而會使情形更糟。除非整個開發環境都是面向對象的,否則對象產生的好處還沒有帶來的麻煩多。有人可能會說PHP不是一個真正的面向對象編程的語言, PHP 是一個混合型 語言,你可以使用面向對象編程,也可以使用傳統的過程化編程。然而,對於大型項目的開發,你可能想需要在PHP中使用純的面向對象編程去聲明類,而且在你的項目開發只用對象和類。隨著項目越來越大,使用面向對象編程可能會有幫助,面向對象編程代碼很容易維護,容易理解和重復使用,這些就是軟體工程的基礎。在基於Web的項目中應用這些概念就成為將來網站成功的關鍵。 對象(Object)是問題域或實現域中某些事物的一個抽象,它反映此事物在系統中需要保存的信息和發揮的作用;它是一組屬性和有權對這些屬性進行操作的一組服務的封裝體。 關於對象要從兩方面理解:一方面指系統所要處理的現實世界中的對象;另一方面對象是計算機不直接處理的對象,而是處理相應的計算機表示,這種計算機表示也稱為對象。簡單的來說,一個人就是一個對象,一個尺子也可以說是個對象。
❸ OOD/OOP是啥意思呀
1 OOD:
面向對象設計(Object-Oriented Design,OOD)方法是OO方法中一個中間過渡環節。其主要作用是對OOA分析的結果作進一步的規范化整理,以便能夠被OOP直接接受。
2 OOP:
面向對象編程(Object Oriented Programming,OOP,面向對象程序設計)是一種計算機編程架構。OOP 的一條基本原則是計算機程序是由單個能夠起到子程序作用的單元或對象組合而成。
3 OOA:
Object-Oriented Analysis(面向對象分析方法)是確定需求或者業務的角度,按照面向對象的思想來分析業務。例如:OOA只是對需求中描述的問題,進行模塊化的處理,描述問題的本質,區別每個問題的不同點相同點,確定問題中的對象。OOA與結構化分析有較大的區別。OOA所強調的是在系統調查資料的基礎上,針對OO方法所需要的素材進行的歸類分析和整理,而不是對管理業務現狀和方法的分析。
4 OO:
OO(Object Oriented,面向對象)是當前計算機界關心的重點,它是90年代軟體開發方法的主流。面向對象的概念和應用已超越了程序設計和軟體開發,擴展到很寬的范圍。如資料庫系統、互動式界面、應用結構、應用平台、分布式系統、網路管理結構、CAD技術、人工智慧等領域。
❹ Java面向對象編程(OOP)是怎麼理解
Java是一個支持並發、基於類和面向對象的計算機編程語言。
代碼開發模塊化,更易維護和修改。
代碼復用。
增強代碼的可靠性和靈活性。
增加代碼的可理解性。
面向對象編程有很多重要的特性,比如:封裝,繼承,多態和抽象。
❺ 面向對象編程是什麼意思
面向對象編程又稱OOP,是一種計算機編程架構。本質是以建立模型體現出來的抽象思維過程和面向對象的方法。
OOP的一條基本原則是計算機程序由單個能夠起到子程序作用的單元或對象組合而成。OOP達到了軟體工程的三個主要目標:重用性、靈活性和擴展性。OOP=對象+類+繼承+多態+消息,其中核心概念是類和對象。
面向對象程序設計方法是盡可能模擬人類的思維方式,使得軟體的開發方法與過程盡可能接近人類認識世界、解決現實問題的方法和過程,也即使得描述問題的問題空間與問題的解決方案空間在結構上盡可能一致,把客觀世界中的實體抽象為問題域中的對象。
(5)面向對象編程oop擴展閱讀
面向對象程序設計以對象為核心,該方法認為程序由一系列對象組成。類是對現實世界的抽象,包括表示靜態屬性的數據和對數據的操作,對象是類的實例化。對象間通過消息傳遞相互通信,來模擬現實世界中不同實體間的聯系。在面向對象的程序設計中,對象是組成程序的基本模塊。
模型是用來反映現實世界中事物特徵的。任何一個模型都不可能反映客觀事物的一切具體特徵,只能對事物特徵和變化規律的一種抽象,且在所涉及的范圍內更普遍、更集中、更深刻地描述客體的特徵。通過建立模型而達到的抽象是人們對客體認識的深化。
❻ 面向對象的程序設計的OOP名詞釋意
編程范型 對於OOP的准確定義及其本意存在著不少爭論。
通常,OOP被理解為一種將程序分解為封裝數據及相關操作的模塊而進行的編程方式。有別於其它編程方式,OOP中的與某數據類型相關的一系列操作都被有機地封裝到該數據類型當中,而非散放於其外,因而OOP中的數據類型不僅有著狀態,還有著相關的行為。OOP理論,及與之同名的OOP實踐相結合創造出了新的一個編程架構;OOP思想被廣泛認為是非常有用的,以致一套新的編程范型被創造了出來。(其它的編程范型例如函數式編程或過程式編程專注於程序運行的過程,而邏輯編程專注於引發程序代碼執行的斷言)
對面向模擬系統的語言(如:SIMULA 67)的研究及對高可靠性系統架構(如:高性能操作系統和CPU的架構)的研究最終導致了OOP的誕生。
❼ java面試提問:什麼是OOP
OOP: Object Oriented Programming,面向對象的程序設計。所謂"對象"在顯式支持面向對象的語言中,一般是指類在內存中裝載的實例,具有相關的成員變數和成員函數(也稱為:方法)。面向對象的程序設計完全不同於傳統的面向過程程序設計,它大大地降低了軟體開發的難度,使編程就像搭積木一樣簡單,是當今電腦編程的一股勢不可擋的潮流。
(7)面向對象編程oop擴展閱讀:
OOP 的優點:使人們的編程與實際的世界更加接近,所有的對象被賦予屬性和方法,結果編程就更加富有人性化。
· OOP 的也有缺點,就 C++ 而言,由於面向更高的邏輯抽象層,使得 C++ 在實現的時候,不得不做出性能上面的犧牲,有時候甚至是致命的 ( 所有對象的屬性都經過內置多重指針的間接引用是其性能損失的主要原因之一;不過,筆者的局限性在於未使用過 VC++ 外的面向對象語言,所以不是十分肯定,哈哈,有人笑出來了… )。
在計算機速度飛速發展的今天,你可能會說,一丁點的性能犧牲沒什麼大不了。是的,從面向對象的角度,使的編程的結構更加清晰完整,數據更加獨立和易於管理,性能的犧牲可以帶來這么多的好處,沒有理由不做穩賺的生意吧?
不過,在某些對速度要求極高特殊場合,例如你做的是電信的交換系統,每秒鍾有超過百萬的人同時進行電話交換,如果,每一個數據交換過程都是一個對象,那麼總的性能損失將是天文數字!!
❽ 1、 總結一下面向對象編程(OOP)的基本特徵。
面向對象三大特性:封裝,繼承,多態
面向對象(Object Oriented,縮寫為OO)是現代軟體技術的精髓。從早期的SmallTalk到如日中天的Java,都滲透著面向對象思想。
OO具有三大特性:封裝性、繼承性和多態性。想掌握面向對象思想,就必須深入理解
其三大特性。這里我盡量少談概念,只用一個生活中的例子和一段代碼來解釋它們。
1、封裝性(Encapsulation)
所謂封裝,就是將某些東西包裝和隱藏起來,讓外界無法直接使用,只能通過某些特定的方式才能訪問。OO將萬物都視為「對象」(Object),任何對象都具有特性和行為。我們將其特性稱為「成員變數」 (MemberVarible),將其行為稱之為「成員函數"(Member Function),被封裝的特性只能通過特定的行為去訪問。
大家都見過旅館里常用的一種茶葉吧,就是用紙袋把茶葉包裝起來再系是一根線。用的時候只需要將其放在水杯里泡就行。這樣的好處是不會將茶葉渣和茶垢弄的滿杯子都是。
好!這就是一個封裝的例子。
我們喝茶的目的是享受茶葉的香冽;所以茶葉的味道(Flavour)就是茶葉所具有的最
重要特性之一;可是我們無法直接享受它的清香,因為被外面的紙袋「封裝」起來了。唯一的辦法就是「泡」(Dilute),將茶袋扔在開水中泡,它的味道就出來了,融入水中。
如果我們把袋裝茶葉看作一個對象的話,它提供了成員變數Flavour和成員函數Dilute
。並且Flavour是私有(Private)的,我們不能直接把它吞進肚子去,而只能通過成員函
數Dilute才能享受Flavour。
下面用C++代碼來描述這個例子:
Class CTea
{
Private:
Cstring m_Flavour; //味道
Cstring m_Color; //顏色
...... //等等其它屬性
Private:
Void CTea(); //構造函數
Void ~CTea(); //析構函數
Public:
Cstring Dilute();//沏茶
...... //等等其它方法
}
Cstring CTea::Dilute()
{
//怎樣泡出味道來的代碼
}
這就是封裝。通過將對象的某些屬性聲明為Private隱藏起來,只能使用其提供的特定
方法去訪問。
2、繼承(Inheritance)
如果只是封裝,那麼非面向對象語言也能部分的做到。比如在C中,用結構(Struct)、
VB中用自定義類型(Type)也能封裝一些變數。
OO最有吸引力的特性是繼承。通俗的說後代具有祖先的某些特點就叫繼承,當然後代還可以具有自己獨有的特徵。舉個例子吧,菜刀。
菜刀(cutlery)是鋼(Steel)做的,鋼是一種金屬(Metal),金屬則是大千世界裡的一種物質(Substance)。所以菜刀的一些特性可以追溯到物質具有的一般屬性。正是因為這個道理,MFC中所有類均從CObject繼承而來。
這就是繼承。菜刀直接繼承了鋼的特性,鋼又繼承了金屬的特性,......下面的代碼描
述了這種復雜而有獨特的繼承關系:
Class CSubstance
{
Private:
int m_color;
void CSubstance();
void ~CSubstance();
//......(我是學文科的,具體屬性說不上來)
}
Class CMetal:Public CSubstance
{
void CMetal();
void ~CMetal();
//......
}
Class CSteel:Public CMetal
{
void CSteel();
void ~CSteel();
//......
}
Class CCutlery:Public CSteel
{
private:
Cstring m_Blade;
void CCutlery();
void ~CCutlery();
//......
Public:
void Cut();
}
這里,CSubstance被稱為基類(Base class),其它被稱為衍生類(Derived class)。衍生類與基類是「Is kind of」的關系。子類與其祖先類之間復雜的函數調用關系不在本文討論之列。
繼承是一種樹狀的層次關系。子類在繼承祖先類的成員變數和成員函數的同時也可以
定義自己的成員變數和成員函數。比如,Metal 除了繼承了Substance的一般特性外,還具有自己的屬性諸如可延展性;CCutlery在繼承CSteel的特性後還具有自己的成員諸如「刀刃」(Blade)、「鋒利」(Sharpness)、行為有如「切」(Cut)等。
面向對象技術是對現實生活的抽象,你可以用生活中的經驗去思考程序設計的邏輯。
3、多態性(Polymorphism)
討論多態之前先要明白什麼是「虛擬」(Virtual)。C++/MFC就是用虛擬這種方式實現多態的。為什麼「虛擬」這個概念?看下邊的例子:
Class Cincect //昆蟲類
{
private:
int m_foot; //腳的數量
...... //其它成員變數
private:
void Cincect();
void ~Cincect();
public:
void Bite()//咬人
{
...... //怎樣咬人的代碼,比如張開嘴啃
}
}
我把Bite(咬)這個動作在基類中定義為一般化動作。可是,不是所有昆蟲咬
人的方法都一樣(況且還有的根本就不咬人呢,比如蜻蜓),比如蚊子是用嘴那個
吸管叮人而螞蟻是用嘴去夾。
從昆蟲這個類別衍生出以下兩個類別:Cant(螞蟻)、Cmosquito(蚊子)。
class Cant :public Cincect //螞蟻類
{
......
}
class Cmosquito :public Cincect //蚊子類
{
......
}
它們都繼承了Cincect的所有成員,當然也繼承了Bite()這個動作。現在就有問題了:
同樣繼承自昆蟲,當我們使用Bite()這個動作時怎麼才能區分螞蟻和蚊子各自的獨有的咬人方式呢?
方法之一是用「::」符號指明具體引用的是那一個,但這樣明顯失去了靈活性;
另一種方法就是「虛擬」。使用關鍵字virtual將Bite()聲明為虛擬函數,然後在每個
衍生類中重新定義,描述它們各自的咬人方法,調用的時候也不會都一種結果啦。於是上邊的例子可以改寫為:
Class Cincect //昆蟲類
{
private:
int m_foot; //腳的數量
...... //其它成員變數
private:
void Cincect();
void ~Cincect();
public:
virtual Bite(){}//咬人,但我們只聲明這個成員函數,
//卻讓它什麼動作都不做,讓衍生類自己去定
//義各自的咬人方法
}
class Cant :public Cincect //螞蟻類
{
......
virtual Bite();
}
Cant::Bite()
{
...... //螞蟻具體的咬人方式
}
class Cmosquito :public Cincect //蚊子類
{
......
virtual Bite();
}
Cmosquito::Bite()
{
...... //蚊子具體的咬人方式
}
所以,虛擬的目的是只在基類中將一般化動作聲明一個成員函數的原型而不做
具體定義,讓衍生類自己去定義。
這就是面向對象的特徵之三:多態性。基類的同一個成員在不同的衍生類中可以具
有不同的形態,更好地抽象和描述大千世界中的諸多「對象」。
1.了解什麼是多態性
2.如何定義一個虛方法
3.如何重載一個虛方法
4.如何在程序中運用多態性
面向對象程序設計中的另外一個重要概念是多態性。在運行時,可以通過指向基類的指針,來調用實現派生類中的方法。 可以把一組對象放到一個數組中,然後調用它們的方法,在這種場合下,多態性作用就體現出來了,這些對象不必是相同類型的對象。當然,如果它們都繼承自某個類,你可以把這些派生類,都放到一個數組中。 如果這些對象都有同名方法,就可以調用每個對象的同名方法。本節課將向你介紹如何完成這些事情。
1.清單9-1. 帶有虛方法的基類:DrawingObject.cs
using System;
public class DrawingObject
{
public virtual void Draw()
{
Console.WriteLine("I'm just a generic drawing object.");
}
}
說明
清單9-1 定義了DrawingObject類。這是個可以讓其他對象繼承的基類。該類有一個名為Draw()的方法。Draw()方法帶有一個virtual修飾符,該修飾符表明:該基類的派生類可以重載該方法。DrawingObject類的 Draw()方法完成如下事情:輸出語句"I'm just a generic drawing object."到控制台。
2.清單9-2. 帶有重載方法的派生類:Line.cs, Circle.cs, and Square.cs
using System;
public class Line : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Line.");
}
}
public class Circle : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Circle.");
}
}
public class Square : DrawingObject
{
public override void Draw()
{
Console.WriteLine("I'm a Square.");
}
}
說明
清單9-2定義了三個類。這三個類都派生自DrawingObject類。每個類都有一個同名Draw()方法,這些Draw()方法中的每一個都有一個重載修飾符。重載修飾符可讓該方法在運行時重載其基類的虛方法,實現這個功能的條件是:通過基類類型的指針變數來引用該類。
3.清單9-3. 實現多態性的程序:DrawDemo.cs
using System;
public class DrawDemo
{
public static int Main(string[] args)
{
DrawingObject[] dObj = new DrawingObject[4];
dObj[0] = new Line();
dObj[1] = new Circle();
dObj[2] = new Square();
dObj[3] = new DrawingObject();
foreach (DrawingObject drawObj in dObj)
{
drawObj.Draw();
}
return 0;
}
}
說明
清單9-3演示了多態性的實現,該程序使用了在清單 9-1 和清單9-2中定義的類。在DrawDemo類中的Main()方法中,創建了一個數組, 數組元素是DrawingObject 類的對象。該數組名為dObj,是由四個DrawingObject類型的對象組成。
接下來, 初始化dObj數組, 由於Line, Circle和Square類都是DrawingObject類的派生類,所以這些類可以作為dObj數組元素的類型。 如果C#沒有這種功能,你得為每個類創建一個數組。繼承的性質可以讓派生對象當作基類成員一樣用,這樣就節省了編程工作量。
一旦數組初始化之後,接著是執行foreach循環,尋找數組中的每個元素。在每次循環中, dObj 數組的每個元素(對象)調用其Draw()方法。多態性體現在:在運行時,各自調用每個對象的Draw()方法。盡管dObj 數組中的引用對象類型是DrawingObject,這並不影響派生類重載DrawingObject 類的虛方法Draw()。 在dObj 數組中,通過指向DrawingObject 基類的指針來調用派生類中的重載的Draw()方法。
輸出結果是:
I'm a Line.
I'm a Circle.
I'm a Square.
I'm just a generic drawing object.
在DrawDemo 程序中,調用了每個派生類的重載的Draw()方法。 最後一行中,執行的是DrawingObject類的虛方法Draw()。這是因為運行到最後,數組的第四個元素是DrawingObject類的對象。
小結
現在對多態性有所了解之後,你可以在派生類中,實現一個重載基類虛方法的方法。虛方法和重載的派生類方法之間的關系就體現出C#的多態性。
❾ 面向對象程序
面向對象的概念和應用已超越了程序設計和軟體開發,擴展到如資料庫系統、互動式界面、應用結構、應用平台、分布式系統、網路管理結構、CAD技術、人工智慧等領域。面向對象是一種對現實世界理解和抽象的方法,是計算機編程技術[1] 發展到一定階段後的產物。
面向對象編程(Object Oriented Programming,OOP,面向對象程序設計)是一種計算機編程架構。OOP 的一條基本原則是計算機程序是由單個能夠起到子程序作用的單元或對象組合而成。OOP 達到了軟體工程的三個主要目標:重用性、靈活性和擴展性。為了實現整體運算,每個對象都能夠接收信息、處理數據和向其它對象發送信息。OOP 主要有以下的概念和組件:
組件 - 數據和功能一起在運行著的計算機程序中形成的單元,組件在 OOP 計算機程序中是模塊和結構化的基礎。
抽象性 - 程序有能力忽略正在處理中信息的某些方面,即對信息主要方面關注的能力。
封裝 - 也叫做信息封裝:確保組件不會以不可預期的方式改變其它組件的內部狀態;只有在那些提供了內部狀態改變方法的組件中,才可以訪問其內部狀態。每類組件都提供了一個與其它組件聯系的介面,並規定了其它組件進行調用的方法。
多態性 - 組件的引用和類集會涉及到其它許多不同類型的組件,而且引用組件所產生的結果得依據實際調用的類型。
繼承性 - 允許在現存的組件基礎上創建子類組件,這統一並增強了多態性和封裝性。典型地來說就是用類來對組件進行分組,而且還可以定義新類為現存的類的擴展,這樣就可以將類組織成樹形或網狀結構,這體現了動作的通用性。
由於抽象性、封裝性、重用性以及便於使用等方面的原因,以組件為基礎的編程在腳本語言中已經變得特別流行。典型的OOP程序設計語言有C++、JAVA(C語言屬於純粹的面向過程的編程語言,以函數為主),Python 和 Ruby 是最近才出現的語言,在開發時完全採用了 OOP 的思想,而流行的 Perl 腳本語言從版本5開始也慢慢地加入了新的面向對象的功能組件。用組件代替「現實」上的實體成為 JavaScript(ECMAScript) 得以流行的原因,有論證表明對組件進行適當的組合就可以在英特網上代替 HTML 和 XML 的文檔對象模型(DOM)。