日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

代码整洁之道-对象和数据结构

發布時間:2024/8/23 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代码整洁之道-对象和数据结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

現在,有一個計算面積的需求,其中一種實現如下:

class Square{public $side; } class Geometry{public function area($shape){if($shape instanceof Square){return $shape->side * $shape->side;}return 0;} }

有人看了,你這抽象的有問題啊,很明顯是面向過程的,如果新加一個類型,Geometry類中的所有方法都要修改。嗯,卻是是這樣,但反過來想,如果新加一個方法,所有現有的形狀類都不用動,只要在Geometry類中添加方法就行了。

當然了,還有一種多態的實現方式:

class Square implements Shape{private $side;public function area(){return $this->side * $this->side;} }

你以為這樣就萬事大吉了?并沒有。確實這樣實現,添加新的類型,只要新鞋一個類實現方法即可,很簡單。但是如果要添加一個新的函數,那不好意思,所有的類都要進行修改。

簡單總結下,就是說:

  • 過程式代碼便于在不改動現由數據結構的前提下添加新的函數,面向對象便于在不改動現由函數的前提先添加新的類型
  • 過程式代碼難以添加新的數據結構,因為必須修改所有函數。面向對象代碼難以添加新函數,因為必須修改所有類
  • 對象暴露行為,隱藏數據。便于添加新的數據類型而無需修改現有行為,同時也難以在現有對象中添加新的行為
  • 數據結構(上面的第一種實現)暴露數據,沒有明顯的行為。便于向現有數據結構添加新行為,同時也難以向現有函數添加新的數據結構。

當然,具體使用哪一種還是應該靈活選擇,不必拘泥。

如果希望靈活添加新行為,就使用數據結構的方式。如果希望靈活添加新類型,就使用面向對象的方式。

總結

以上是生活随笔為你收集整理的代码整洁之道-对象和数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。