我很努力地解釋java中的oop概念。Java OOP封裝。爲什麼是Object.doSomething();比doSomething(Object)更好;?
oop的一個主要原則是對象有方法;所以Object.method();作品。 我將這與過程編程(其中必須執行方法(對象))進行對比。
這是所謂的封裝?
oop方式的優點是什麼?
我很努力地解釋java中的oop概念。Java OOP封裝。爲什麼是Object.doSomething();比doSomething(Object)更好;?
oop的一個主要原則是對象有方法;所以Object.method();作品。 我將這與過程編程(其中必須執行方法(對象))進行對比。
這是所謂的封裝?
oop方式的優點是什麼?
在場景Object.doSomething()中,對象將完全控制其在方法中使用的屬性。
但是在另一個調用中,您必須將對象的所有屬性設置爲公開的,以便在方法中可用。這不是一個更安全的操作。
嗯,如果在場景2中我有可以用getter/setter訪問的私有屬性?他們會不會仍然可用? – Gevorg 2012-02-02 19:00:17
@Gevorg他們只是在getter/setter中,你仍然可以控制這些私有屬性,並且你會根據你想要的外部類來顯示它們。 – 2012-02-02 19:03:00
這是一個很大的問題,填充多本書的答案,但總之,類成員有訪問修飾符(公共,私人,受保護)。私人成員可以被其他類成員訪問,如方法,但不能從外部函數訪問。
OOP傳播封裝;結果,狀態和行爲被封裝在表示對象的類中。根據封裝發生的級別,使用基於靜態(類級別)或實例(對象級別)的封裝。
方法(對象)是一種適用於數據結構的範例。數據結構是關於在語義上一致並且相關的信息分組字段(即,結構人員{姓名,姓氏,日期出生})。
面向對象編程是數據結構上的一個步驟。在OOP中,我們不僅對相關的數據字段進行分組,而且還包含與數據相關的函數(方法,成員函數)(以及正確處理數據的函數)。
封裝就是讓部分成員保持私有對象。目標是將外部世界的內部工作「隱藏」起來,保護對象的狀態免遭「腐敗」,或者被分配不正確的值。 OOP語言提供了多個「訪問修飾符」,用於指定給定成員是否可以被特定類別的對象(子類的實例,同一個「包/命名空間/庫」中的類,任何其他類等)訪問。 )。
object.method()通常是要求對象執行一些可能涉及訪問無法在類之外訪問的字段的內容。
以上是定義和解釋成員函數(方法)的概念和封裝的概念是如何結合在一起的。
Referrences:
http://en.wikipedia.org/wiki/Encapsulation_%28object-oriented_programming%29
http://en.wikipedia.org/wiki/Object-oriented_programming
OOP的另外兩個優點是重複使用和多態性。
重用: 如果你在一個文件或一個程序中使用doSomething(Object)
,它可以工作的優良該程序。現在,想象你需要在另一個程序中使用你的Object
。您需要在新程序中複製doSomething()
方法(可能需要複製並粘貼它)。這可能會起作用,但這是不好的做法,並且使這種邏輯成爲一場噩夢。如果doSomething()
邏輯是Object
內部的函數,那麼該邏輯與對象「居住」。
多態性: 想象一下另一種情況,即Object只是許多類似類型之一。如果利用接口,許多對象可以實現doSomething()
函數以滿足其特定需求。
例子:
interface ICar
{
void doSomething();
void getFuel();
}
class GasCar : ICar
{
public void doSomething()
{
//do something a gas car would do
}
public void getFuel()
{
//logic to pull gas out of a tank
}
}
class ElectricCar : ICar
{
public void doSomething()
{
//do something an electric car would do
}
public void getFuel()
{
//logic to pull fuel out of a battery
}
}
我不想無禮,但你爲什麼要解釋給任何人這些概念,如果你不明白嗎?或者你的意思是你正在努力去理解這些概念? – 2012-02-02 18:43:51
將此問題移到programmers.stackexchange.com – jamesTheProgrammer 2012-02-02 18:45:12