iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
自我挑戰組

入坑 RoR 必讀 - Ruby 物件導向設計實踐系列 第 2

Day2 CH1物件導向的設計?(上)

  • 分享至 

  • xImage
  •  

「程序性」和「物件導向」?

The word is procedural. The word is also object-oriented.

書上的這兩句話即是本章重點,我們的世界就是由程序性物件導向組成,本文接下來會緊扣著這兩句話繼續探討。

時間流動著,事件一件件發生,舉例來說:每天早上我們盥洗、出門、上班……,這一系列的活動構成「程序性」。

每個產生互動的物體我們稱之為「物件」,每個物件會擁有自己的「行為」,在這些物件中,每一個都擁有它們自己的行為,而且它們之間某些互 動或許還是可預測的。

舉例來說:家中的貓咪與毛線球,彼此都是一個物件,貓咪在玩毛線球的互動為傳遞訊息的行為,而此過程我們稱之為「物件導向」。

解釋了程序性與物件導向的不同,想必大家還是跟我一樣有點模糊吧!本書主要著重於物件導向的探討,那麼究竟什麼是物件導向呢?物件導向又有什麼值得學習的部分呢?

何謂物件導向程式設計?

先來看看 wiki 對於物件導向程式設計的定義:

Object-Oriented Programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data and code.
The data is in the form of fields (often known as attributes or properties), and the code is in the form of procedures (often known as methods).

簡單來說,物件導向的應用程式是由彼此交互的元件組成其整體行為。這裡的元件可以想像成現實世界中的「物件」,物件本身包含了「資料」和「方法」,「資料」就是事物的資訊或屬性,而「方法」就是該事物與其他事物傳遞訊息的方式。

因此,我們在開發新的應用程式時,應將每個部分視為一個元件,每個元件各司其職,透過傳遞訊息的方式達成互動,有了這個基礎的概念後,可以幫助我們更近一步去理解物件導向設計的特色與優點。

物件導向程式設計的5個概念:

  1. 軟體開發的目的:無論是開發微不足道的遊戲還是用於重要應用,軟體開發都應有其原因和目標。無論規模大小,目標應用程式都是關鍵。
  2. 成本節省與程式設計:在節省成本的軟體開發中,可能需要經歷痛苦的程式設計過程。
  3. 愉悅的程式碼與生產力:愉悅的程式碼和高效的軟體開發速度並不是互相排斥的。物件導向設計技巧可以同時實現這兩者,解決了道德和技術問題。
  4. 設計解決的問題:設計在處理軟體開發中的變化和不確定性方面扮演重要角色。雖然假設應用程式一成不變,但現實中需求經常變動,這使得設計變得不可或缺。
  5. 易於修改的程式碼:易於修改的程式碼能夠增加開發和擴充的樂趣,並具有靈活性和適應性。相反,抗拒變化的程式碼會增加修改的成本,最終可能變得難以維護。

物件導向程式設計常見問題

  1. 物件間的交互與依賴關係:物件導向程式由彼此交互的元件(物件)組成,它們透過訊息傳遞來實現交互。這導致了物件間的依賴關係,其中訊息傳送者必須瞭解接收者以發送正確的訊息。
  2. 依賴關係管理的重要性:物件導向設計與管理依賴關係有關,它的目的是使依賴關係能夠容忍變化,從而實現易於修改的程式碼。
  3. 過度依賴關係的後果:當物件之間相互瞭解太多內容時,它們會變得固執且具有束縛力,也就是所謂的耦合。這可能使測試和重複使用變得困難,並在不同環境中引起抵觸。

深入探討物件導向程式設計

  1. 設計的難點:設計的困難之處在於需要同時考慮當前的需求和未來的變化。對已提交的測試版進行擴充或修改的成本可能超過最初的開發成本。因此,設計必須兼顧現在和未來。
  2. 設計的全局觀:設計過程需要全局觀,包括充分理解整體需求,考慮各種設計選擇的優劣,並設計出節省成本、未來也能保持低成本的程式碼。
  3. 未來的實用性:儘管設計不能預測未來的具體需求,但實用性的設計不是預測性的,而是能夠適應變化,這種實用性的設計可以在未來面對變化時保有彈性。
  4. 目的和首要目標:設計的目的是使開發人員能夠因應不同需求持續進行設計,而首要考量目標是減輕因變化帶來的成本。

現在有稍稍的理解物件導向程式了嗎?今天先帶大家看到這邊,我們明天再接續物件導向設計原則的部分!

參考資料:


上一篇
Day1 開賽宣言與規劃
下一篇
Day3 CH1物件導向的設計?(下)
系列文
入坑 RoR 必讀 - Ruby 物件導向設計實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言