<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OOP on</title><link>https://tonny0531.github.io/categories/oop/</link><description>Recent content in OOP on</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Fri, 25 Mar 2022 15:59:54 +0800</lastBuildDate><atom:link href="https://tonny0531.github.io/categories/oop/index.xml" rel="self" type="application/rss+xml"/><item><title>AbstractClass比較Interface</title><link>https://tonny0531.github.io/post/developer/abstract_interface/</link><pubDate>Fri, 25 Mar 2022 15:59:54 +0800</pubDate><guid>https://tonny0531.github.io/post/developer/abstract_interface/</guid><description>前言 最近在看同事們在分享 OOP(Object-oriented programming) 的觀念，在過程中他特別提到了抽象
也是我今天寫這篇的原因，在過程中我假設了一種情境來討論物件應該怎麼切分比較好
這裡要說明，這個討論的過程中的程式語言是以 Dotnet 來說明的，因此有些地方並不一定是用在每種語言上
專有名詞 耦合(Coupling) 在我的認知裡面，耦合是指物件跟物件之間的關係，若高耦合的話，很高機會改了其中一個物件
導致另外一個物件故障
也就是業界常說的改 A 壞 B
抽象類別(Abstract Class) 特性 不可以直接透過 New 來建立物件 可以訂定抽象方法，強迫繼承的物件去實驗方法 可以寫共用方法的邏輯在抽象類別層 介面(Interface) 特性 不可以實作，僅僅只是是規範而已 繼承的Class必須要實現規範才可當作成此介面 C#9.0打破了這個特性，但我不太能接受就是了
情境 有一個班級，裡面有學生和老師
我們要定義出班級裡面的學生和老師
學生和老師都有開始工作(上課)、結束工作(下課)
並且由班級來決定是否開始工作(上課)
物件切分 依據情境來看，我們可以切出有三個主要物件
班級 學生 老師 物件圖開始
由上方可見班級對老師、學生來說是耦合的，很高機會改動了學生這個物件，會連帶影響到班級
最後面再來解決物件耦合的問題
第一次抽象 基於老師與學生都是人的情況下，我們可以抽出一個抽象類別叫做 People
並在 People 裡面定義開始工作與結束工作的抽象方法，待繼承的人實作
第一次抽象
好處 若未來有共用的方法要實作我只要修改 People 即可
壞處 根據前面的類別圖可以看到 People 和 Class 仍是高耦合的情況</description></item></channel></rss>