2013-12-17 146 views
1

考慮一個簡單的類A該類中使用的OOP概念

class A 
{ 
    int id=0; 
    public int getId() 
    { 
     return this.id++; 
    } 
} 

問題是What are all the OOPS concepts used in the above class?

我問面試官,他是什麼意思的OOPS概念和得到的答覆是general OOPS concepts like inheritance, polymorphism, etc, etc.,

我回答說,繼承不是在上面的代碼(沒有基類派生自)和唯一的答案,我能想到的在這個運動是這樣的:

variable-hiding因爲專用變量id只能通過getId方法訪問。

你們有什麼東西可以抓到?

編輯:

會是怎樣在C#?在java中,我們有默認修飾符internal。 如果對c#要求相同的問題,是否有任何更改?

+1

封裝是我看到的唯一概念 – user1233963

+0

@ user1233963:那麼,你也意味着變量隱藏的東西? ('id'被封裝了嗎?) –

+0

這裏沒有'Encapsulation','id'的訪問修飾符是默認的。 –

回答

6

一個更好的問題是關於違反所有良好的編程實踐。

getId(),看起來它是一個簡單的getter,但實際上修改了類的狀態。它應該被稱爲generateId(); getNextId()將被接受。

封裝(是的,可變隱藏的東西)也被違反,因爲id具有內部而非私有的可見性,使得它對於同一包中的其他類無可見的可見性。

+0

感謝您的積分。另一件我現在注意到的事情是:'getNextId'不是一個可接受的名字,因爲你調用了'getId'函數多少次,它只會返回1 –

+0

我也標記過'C#',以查明是否存在任何與該語言相關的功能。因爲在C#中,默認情況下,一個類的所有成員都是私有的。 –

1
class A 
{ 
    private int id=0; 
    public int getId() 
    { 
     return this.id++; 
    } 
} 

那麼它遵循了什麼,但抽象,ADT但它沒有封裝不幸。我們不能稱它爲封裝,因爲變量不是私有的,並且由於它沒有隱藏數據而具有評估者方法。我們可以說它只有在私人訪問說明符ID爲時才遵循封裝。