3 回答

TA貢獻1785條經驗 獲得超4個贊
使用getter和setter函數可以進行約束和封裝??梢哉fx是半徑。shape.x = -10沒有太大意義。另外,如果有人嘗試設置非法值,則可以打印錯誤,設置默認值或什么都不做。
優良作法是將成員變量設為私有,這樣程序就不能直接使用它們對其進行修改。

TA貢獻2037條經驗 獲得超6個贊
很多人提到封裝實現的細節,這對我來說是在類中使用getter和setter的最大原因。這樣,您還可以獲得許多其他好處,包括能夠一時興起地拋出并替換實現,而無需接觸使用類的每段代碼。在一個小型項目中,這并不是什么大好處,但是如果您的代碼最終成為一個使用良好的(內部或公共)庫,那么它將是一個巨大的好處。
一個具體的例子:數學中的復數。有些語言將它們作為一種語言或框架功能,而另一些則沒有。我將在這里以可變的類為例,但是它很容易不變。
復數可以寫在表單上,a + bi
具有實部和虛部,非常適合[gs]etRealPart
和[gs]etImaginaryPart
。
但是,在某些情況下,更容易推斷出極性形式re^(iθ)
為[gs]etRadius
(r)和[gs]etAngle
(θ)的復數。
您還可以公開類似[gs]etComplexNumber(realPart, imaginaryPart)
和的方法[gs]etComplexNumber(radius, angle)
。根據參數類型,這些名稱可能需要也可能不需要不同的名稱,但是類的使用者可以根據需要使用它們。
兩種形式可以互換。您可以很容易地從一種轉換為另一種,因此該類用于內部存儲的形式與該類的使用者無關。但是,消費者可以使用任何一種形式。如果您選擇a + bi形式作為內部表示形式,并使用字段而不是getter和setter公開該形式,則不僅迫使類消費者使用該形式,而且以后也無法輕松地改變主意并用以下形式替換內部表示形式: re ^(iθ),因為事實證明在特定情況下更容易實現。您必須使用已定義的公共API,該API要求使用特定的字段名稱專門公開實部和虛部。
添加回答
舉報