2011-07-31 117 views
4
public class Car 
{ 
    public char color; 

    public char getColor() 
    {   
    return color;  
    }  

    public void setColor(char color) 
    {  
    this.color = color;  
    } 
} 

public class MyCar 
{ 
    private Car car = null;  

    public MyCar() 
    { 
     this.car = new Car(); 
     car.color = 'R'; 
    } 
} 

上面的代碼違反了哪個OOPS原則?
•抽象 •封裝 •多態性 •上述關於面向對象的問題

無據我所知,封裝是回答這個問題。只是想知道其他選項是否也是如此。

回答

5

好了,我會在這些方面查看:

  • 封裝:通過允許的color直接訪問時,Car類暴露的實現細節。伊格納西奧已經表明,他不認爲這種違規是封裝,而是數據隱藏 - 我對「封裝」這個詞的看法是它包含數據隱藏。這只是說明如何以不同的方式使用這些詞彙。

  • 多態性:由名稱MyCarCar判斷應該可能實現通用接口或具有公共基類。至少,給出的類不能多形地使用。

  • 抽象:我認爲使用char作爲顏色的抽象是不合適的。這是否違反抽象違規取決於您「抽象違規」的含義。

0

如果public char color;是不是private char color;這將是封裝的一個例子。這是因爲在當前版本的代碼中,值立即設置,這是一個實現細節。例如,你可以決定添加驗證 - 例如只允許大寫字符。通過允許直接設置字段color驗證不能執行。

0

汽車違反了信息隱藏。

我認爲其他原則正式受到尊重,即。沒有任何東西阻止我讓MyCar類包裝Car類,如果兩個類不打算多態使用的話。

有人可能會說這只是壞的設計,我同意。

同樣適用於使用char作爲顏色:這可能是糟糕的設計,但恕我直言,沒有任何形式上違反OOP原則。

0

按我的理解「數據隱藏」是violated.As你揭露汽車類(顏色)的內部 細節,你也正在使公衆暴露任何一個可以有效或在修改有效值。 現在看封裝OOP原理: 封裝:它沒有違反,因爲相關數據保存在一個乾淨封閉的容器中,它是類和汽車信息不分散在這裏和那裏。

0

按照OOPs Concept,您的代碼被違反數據隱藏。因爲你是在類級別聲明公共變量,並在方法相同的類中使用它。如果您違反了數據隱藏的規定,您也違反了封裝

public class Car 
{ 
    public char color; 

    public char getColor() 
    {   
    return color;  
    }  

    public void setColor(char color) 
    {  
    this.color = color;  
    } 
} 

在上述代碼中,您違反了數據隱藏概念。因爲顏色變量可以在課堂外直接訪問。 封裝也被上述代碼侵犯。

+0

謝謝serenesat。 –

0

沒有違規。您沒有使用任何多態概念。 公共變量可以在代碼中的任何地方訪問。在抽象和封裝中沒有違反......所有都是完美的......以上都不是。