Loading Now

Lập Trình Ứng Dụng Mobile Với Dart Và Flutter (P3)

Ở phần 2, mình đã chia sẻ với các bạn các kiến thức về Variables, Control flow statements, Functions, Comments, Libraries. Trong phần 3 này, cũng là phần kết thúc về ngôn ngữ Dart mình sẽ chia sẻ tiếp cho các bạn về Classes, Mixins, Interfaces, Abstract Class, Exeptions, Async và 1 số topic khác. Đặc biệt là mình sẽ nói về OOP (Hướng đối tượng) trong ngôn ngữ này.

Các phần tiếp theo, mình sẽ đi vào lập trình Mobile trên cả 2 môi trường là Android và Ios. Rất mong các bạn sẽ đón nhận các bài viết chia sẻ của mình.

Classes

Dart là ngôn ngữ hướng đối tượng với các classes (lớp) và kế thừa dựa trên mixin. Mỗi đối tượng là 1 thể hiện (instance) của lớp và tất cả các lớp xuất phát từ đối tượng (Object). Kế thừa dựa trên mixin (mixin-based inheritance) nghĩa là mỗi class chúng ta tạo ra đều có 1 super class (trừ object), phần bên trong mỗi class đều có thể được tái sử dụng trong nhiều class được phân cấp.

1. Sử dụng biến và phương thức trong class

– Sử dụng dấu dot (.) để truy cập đến biến và phương thức

     

* Tạo class Point với 2 thuộc tính là x và y cùng với phương thức distanceTo(). Khởi tạo class Point trong hàm main(), để truy cập đến thuộc tính và phương thức của class sử dụng dot (.) : p.x ; p.y ; p.distanceTo().

Sử dụng ?. thay vì . để tránh một ngoại lệ khi toán hạng là null :

2. Sử dụng Constructor

– Bạn có thể tạo 1 object sử dụng hàm tạo Constructor. Tên của hàm tạo có thể là ClassName hoặc ClassName.identifier

– Tạo đối tượng Point sử dụng 2 hàm khởi tạo là Point() và Point.fromJson() như sau :

– Ở Dart 2 thì sử dụng từ khóa new trước tên constructor

– Một số lớp cung cấp các hàm tạo không đổi. Đặt từ khóa const trước tên hàm tạo :

3. Biến Instance : biến nằm ngoài hàm, nằm trong class

– Tất cả các biến đều có 1 phương thức getter ẩn tương ứng. Nhưng với setter thì không có phương thức ẩn nào cho các biến

– Constructor và khởi tạo các biến :

Inheritance

Tính kế thừa là tạo ra class dựa trên tính chat của class đã có. Đó là class cha, các class con phát sinh từ class cha và đương nhiên là nó sẽ kế thừa lại thuộc tính và phương thức của cha. Class on có thể sử dụng các tính chất như đã định nghĩa ở class cha thông qua từ khóa super() hoặc có thể định nghĩa lại.

– Ghi đè phương thức

Mixins và mixin

Đây là khái niệm mà khi tiếp xúc với Dart khá lúng túng. Vậy mixin là gì? Mixins là gì? và liệu một chiếc xe máy có thể chạy trên nước ?

Mixins – cách để trừu tượng hóa và tái sử dụng code trong các class khác nhau

Như ví dụ trên, class Scooter có thể sử dụng các thương thức được khai báo ở các class Motobike, Plane mà không gặp phải một trở ngại gì. Đây chỉ là cách để tái sử dụng lại code trong Dart chứ không phải là đa thừa kế, đừng nhầm lẫn chỗ này.

Tương tự, khi gọi phương thức show() thì kết quả trả về là This is a ship, bởi vì khi extend qua các class như vậy thì các class đó sẽ được sếp vào 1 stack theo tuyến tính. Class Motobike được extend đầu tiên sẽ nằm trên đầu, sau đó lần lượt các class Plane sẽ xếp sau trong stack. Vì là last in, first out nên khi thực thi thì phương thức show() ở class Ship sẽ được thực thi.

mixin – khai báo việc có thể áp dụng mixin vào class. Class Mixin có thể extends hoặc implements các phương thức được khai báo ở class Ship(). Khi khởi tạo với từ khóa mixin thì trong class đó chỉ có khai báo các phương thức, bạn không thể khởi tạo constructor hoặc getter, setter. Đây giống như 1 chiếc thùng chứa tất cả các phương thức, khi nào bạn cần sử dụng phương thức nào thì extends hoặc implements đến nó và lấy ra sử dụng.

Interfaces và abstract class

1. Interfaces : Dart không hỗ trợ từ khóa interface để khai báo những mỗi class đều định nghĩa một interface

– Implements nhiều Interface :

2. Abstract Class : tính trừu tượng là sự tập trung vào các tính chất cốt lõi nhất của 1 object, loại bỏ đi những tính chất rườm rà xung quanh.

Exception

  • Dart code có thể ném và bắt 1 ngoại lệ.
  • Trái ngược với Java, tất cả các trường hợp ngoại lệ của Dart đều là các ngoại lệ không được kiểm soát. Các phương thức không khai báo ngoại lệ nào chúng có thể ném và bạn không bắt buộc phải bắt bất kỳ ngoại lệ nào.

1. Throw

2. Catch

3. Finally

Async

Async và await

– Phương thức trên tương đương với

  • Chúng ta đã thấy như ví dụ trên, khi sử dụng async và await giúp cho đọc code dễ dàng hơn vì tính chất đồng bộ của nó.
  • Topic về Async mình sẽ giới thiệu cho các bạn việc sử dụng cơ bản nó, các bài tiếp theo khi làm việc với internet thì mình sẽ giới thiệu 1 số kiến thức sâu hơn về Async.

OOP (Ngôn ngữ lập trình hướng đối tượng)

Như mình đã nói ở trên, Dart là ngôn ngữ lập trình hướng đối tượng. Và các tính chất của nó như sau :

a. Encapsulation : tính bao đóng là đối tượng được bảo vệ không cho các truy cập từ code bên ngoài như thay đổi trạnng thái hay nhìn trực tiếp. Tính bao đóng của Dart được thể hiện bằng cách khai báo ( _ ) trước biến hoặc hàm, phạm vi hoạt động của nó là trong library chứa nó và kể cả khi import thì bạn cũng không thể gọi trực tiếp được.

b. Inheritance – tính kế thừa là khả năng cho ta xây dựng class dựa trên tính chất của class đã có. Đó là class Cha, các class Con phát sinh từ class Cha và đương nhiên nó cũng sẽ được thừa kế tính chất của Cha. Class Con có thể sử dụng các tính chất như định nghĩa ở class Cha thông qua super hoặc có thể định nghĩa lại.

c. Polymorphism – tính đa hình là các object trong cùng 1 họ tuân thủ theo 1 thể hiện nhưng có thể thực thi theo nhiều cách khác nhau.

– Override – khi cùng 1 phương thức nhưng cách bên trong phương thức đó thực hiện ở từng nơi lại khác nhau. Ví dụ phương thức countNumberOfWheels ở ví dụ trên, xe máy sẽ trả về 2 nhưng xe ô tô lại trả về 4.

– Overload – không được support trong Dart nhưng bạn có thể sử dụng optional parameter để thay thế, cùng 1 phương thức nhưng có tham số khai báo trong nó có thể được xài hay không được xài.

d. Abstraction – tính trừu tượng là sự tập trung vào các tính chất cối lõi nhất của 1 object, loại bỏ đi những tính chất rườm rà xung quanh.

Tổng kết

Vậy là đã kết thúc 2 bài viết về ngôn ngữ Dart. Rất mong các bạn đọc sẽ tiếp nhận kiến thức chia sẻ của mình. Các bài viết tiếp theo mình sẽ bắt tay vào xây dựng các ứng dụng Mobile trên nền tảng Flutter và ngôn ngữ Dart. 

Cảm ơn mọi người đã xem bài viết của mình !!!

Tài liệu tham khảo: dart.dev

Post Comment

Contact