你會怎樣設計長方形類和正方形類?

時間 2021-05-31 18:30:30

1樓:

class 長方形

}正方形 = new 長方形(w,w)

根據奧卡姆剃刀原理,如無必要勿增實體,那麼只需設計乙個「長方形」類即可,如果需要正方形則new乙個「寬高相等的長方形」!!

而根據小學數學的定義,還有根據組合原理(沒錯組合才是正道),新增乙個「是否正方形」的判斷即可!!

2樓:馬丁嚮往未來

求證:正方形類不可以繼承長方形類

大前提:#define 四方形人們所說的長方形(原因:四角90度的四邊形叫長方形)

過程:因為人們嘴中所說的「長方形」<=等價於=> 四方形

同時我們嘴中所說的「正方形is a長方形」<=等價於=> 正方形is a四方形

所以長方形(本質上)是is a四方形(當四邊不相等) ,正方形(本質上)是is another四方形(當四邊相等),所以正方形類(本質上)不可繼承自長方形類。

3樓:王贇 Maigo

同意@陳碩的看法。

Square和Rectangle兩個類之間沒有繼承關係,而是繼承自共同的父類Shape。Shape類可以求周長和面積,兩個子類各自處理邊長。

如果有把Square當Rectangle用的需求,則在Square類中提供乙個asRectangle方法,或者在Rectangle類中提供乙個接受Square的構造方法,以把Square類的物件轉換成Rectangle類的物件。

4樓:

Rectangle *aShape =

[Rectangle rect:CGRectMake(width,height)];

MutableRectangle *aMutableShape =[MutableRectangle shapeFromRectangle:aShape];

難道不就是這麼簡單嗎? 如果要繼承的話,正方形繼承自長方形的答案很明顯是錯誤的,應該是長方形繼承自正方形才對。正方形繼承自父類還要砍掉乙個width/height?

這是哪門子邏輯啊。

5樓:

根據題述用例,這裡並不需要設計乙個正方形類。而且在這些用例下,設計正方形類為長方形的子類並不合適,因為子類無法替代父類。繼承關係並不能等同於數學上的集合關係。

只有當存在某個用例,需要對正方形進行特定操作時,並且長方形類的實現不通用時,才有很小的可能會需要乙個特化的正方形類。也不是一定需要。比如,如果僅僅只是需要判讀是不是正方形,也可以在長方形類上加乙個方法來實現。

另,沒有哪個設計能適合所有環境。

6樓:Twiknight

要求設計正方形類和長方形類,它們都可以被讀寫尺寸,計算周長和面積。我看到的題目是這樣的,目前答案的答案裡面,輪子哥 @vczh 的方案應該是最完善的——既能契合「正方形是特殊的長方形」這個大家熟知的事實,又能迴避正方形設定size的方式和長方形不一樣。

但是我還是有一點點疑問:

「正方形是特殊的長方形」這句話,一定要用正方形繼承於長方形來表達嗎?

我覺得就題主的要求來說不一定。

這一句話的潛台詞應該是,當它滿足某種特殊條件時,乙個長方形是正方形。

如果這樣理解,那麼他們設定size的方式就沒什麼不同了。

乙個正方形當然可以單獨設定長和寬,只不過設定過後它就不一定是正方形了。

所以,「正方形」不是一種圖形分類,而是乙個屬性,它描述了乙個矩形是不是滿足某種條件。

class

Rect

setwidth

(){}

getheight

(){}

setheight

(){}

getisSquare

()get

parimeter

()get

area()}

神馬,你只設定乙個邊長就改變正方形的大小?

resize

(value

)...

}你也可以不檢查是不是正方形,允許把矩形resize成正方形。

我覺得這才是最自然的思路。

7樓:Belleve

唯讀的正方形確實是唯讀長方形的子類,F-sub 裡面有個超級經典的型別指派:

唯讀正方形的是:

唯讀長方形的是:

當然是子型別。

如果考慮寫,情況就好玩了,如果沒有額外的 side 字段的話,那麼只寫長方形將會是只寫正方形的子型別,如果有額外的字段,則互相不是子型別。

8樓:

trait

Rectangle

trait

Square

extends

Rectangle

// 可變類

class

MutableRectangle

(var

width

:Double

,var

height

:Double

)extends

Rectangle

// 可變類

class

MutableSquare

(var

sideLength

:Double

)extends

Square

9樓:陳厚來

先用到長方形,就設計長方形,先用到正方形,就設計正方形。世界上沒那麼多復用,等需要復用,再重構還來得及。別聽理論派瞎扯淡。

10樓:QAMichaelPeng

11樓:陳碩

都繼承自Shape。

因為在「都可以被讀寫尺寸」這一要求下,無論正方形繼承長方形或者長方形繼承正方形都不滿足Liskov替換原則。

圓與橢圓同理。Circle-ellipse problem

Apple Watch 的表盤設計成長方形是基於什麼考慮?

烟花釋 別給我談空間,成本,軟體什麼的,我只知道以前的蘋果是美觀至上的,看了新發布的突起攝像頭,大寬條天線,方形手錶後。我知道蘋果不在是賈伯斯那個蘋果了。 軒轅傑 1 與之前手機產品螢幕更好統一介面 2 密集恐懼症的UI是最科學的,試想你很多圖示的時候你要滑動多少次才能找到目標?換句話說,MOTO3...

長方形衛生間,門在短邊,如何做三分離設計?

兔小鳥之家 個人的認知來說,不建議做三分離,當然您畫的方案應該說是可行的,當也僅僅是物理角度上尺寸,視覺感受,使用感受和您家面積尺度度上都沒那麼理想,再說您不僅僅乙個衛生間。第二份的乾濕分離方案個人還是覺得蠻理想的,洗衣機的安置在生活中應該說這樣便利度會增加很多。至於移位應該沒有太大的問題,牆排是更...

如果你是怪物獵人的怪物設計師,你會怎樣設計乙個搞玩家心態的糞怪?

笑熬漿糊 1.被殺後材料掉率降低百分之1萬。2.加入時間判定,3分鐘打出3分之1以上血的判定為大佬,從此不輕易出招,任何情況下,見到三蓄 登龍等大招就扭頭。3.遇到重弩就貼身瘋狂攻擊,遇到輕弩和弓箭就貼身,對方不滑步就不攻擊。4.增加裝備判定機制,一身攻擊裝沒有防禦的 或者裸奔的 判定為競速,瘋狂拖...