iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
自我挑戰組

30 天初探 Flutter系列 第 7

Day 7 - Dart 的物件導向

  • 分享至 

  • xImage
  •  

今天的主題是物件導向(Object-oriented programming),也簡稱 OOP,物件導向可以讓程式碼更易於管理,可以把應用程式想成有很多個物件,彼此獨立,並進行互動。

類別(Class):可以想成就是一個模型範本

還有一個叫做抽象類別(Abstract Class):抽象類別無法被實體化,只能作為父類別提供繼承或被定義介面(Interface)使用。

實例(Instance):透過類別(Class)實體化來產生一個物件實例

我自己都覺得這概念超級抽象的,不過可以想成是我今天在一個元宇宙中想要創建棒球隊,而棒球隊會有棒球員,這時候我就可以先定義一個棒球員的類別叫 Player,每個球員都會有名字及守備位置,和一句出場自我介紹的方法~

接著我們要建立第一位球員(實例)了,建立物件時, class 前方加上 new (沒有也是可以的),這時候 player1 第一位球員已經被建立了,但是還沒有給他屬性,因此可以是用 player.name 賦予球員名字,也可以呼叫 class 中的方法。

上述轉換為程式碼,如下方:

void main() {
  var player1 = Player();
  player1.name = 'Ichiro Suzuki';
  player1.position = 'LF';
  player1.sayHi();
  
  var player2 = Player();
  player2.name = 'Shohei Ohtani';
  player2.position = 'Pitcher';
  player2.sayHi();
}

class Player {
  String name = "";
  String position="";
  void sayHi() => print("Hi, I'm $name, position is $position.");
}

Imgur

介紹完基礎的類別和實例,再來是繼承

假設類別是爸爸,他可以有兒子(而且可以有多個兒子),而兒子可以繼承老爸的屬性與方法等,也可以取代老爸的傳統思維。

下方例子,我們建立一個 Person 的類別做為父類別,接著我們再創建一個子類別 Student ,使用 extends 繼承於父類別,可以使用父類別的屬性和方法,也可以呼叫自己的方法。

void main() {
  var student = Student();
  student.name = 'Bob';
  student.age = 12;
  student.sayHi();
	student.study();
}

class Person {
  String name = '';
  int age = 0;
  void sayHi() => print("Hi, I'm $name. I'm $age.");
}

class Student extends Person {
  void study() => print("Hi, I'm $name. I want to go to school.");
}

Imgur

特別的 Mixin

Dart 在類別上有個特別的 Mixin 可使用,有點像是可以讓其他人共用方法但不須使用繼承的方式來共用,直接看例子好了!

我們不繼承 Quarantine 的類別,但可以借用他的方法,將 class 改成 mixin,其他寫法一樣,宣告一個新的 class 為 Manager 繼承 Employee 後再加上 with ,這時我們產生一個 manager 除了可以繼承 Employee 的屬性與方法外,也可以使用 Quarantine 的囉~

void main() {
  var manager = Manager();
  manager.name = 'Alice';
  manager.temp = 36.5;
  manager.clockIn();
  manager.takeTemperature();
}

class Employee {
  var name = '';
  void clockIn() => print('$name clock in');
}

mixin Quarantine {
  double temp = 30;
  void takeTemperature() => print('temperature: $temp');
}

class Manager extends Employee with Quarantine {}

一起到 DartPad 試試吧~

Imgur

關於物件導向相關的概念與實作,我自己本身並沒有很熟悉,所以寫的沒有很深入,但這些在 flutter 中又很常見(不得不會)所以還是硬著頭皮寫了今天的內容,如果有大大發現錯誤的地方,歡迎留言指教~

OK~我們明天見!


上一篇
Day 6 - Dart 的條件與循環控制
下一篇
Day 8 - Flutter 終於開場?
系列文
30 天初探 Flutter14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言