Kỹ thuật cơ bản để kết nối và truy xuất Cơ sở dữ liệu MySQL – PHP

Giới thiệu

Trong nội dung bài này, chúng ta cùng nhau tìm hiểu kỹ thuật cơ bản trong PHP để kết nối và truy vấn Cơ sở dữ liệu MySQL.

Những nội dung chính được trình bày trong bài này:

  • Thiết kế một bảng cơ sở dữ liệu đơn giản gồm một số các trường cơ bản.
  • Cấu hình Hệ quản trị phpMyAdmin để thực hiện việc kết nối và truy xuất được thuận tiện.
  • Kỹ thuật cơ bản trong PHP bao gồm việc thêm mới dữ liệu và truy xuất toàn bộ dữ liệu trong bảng.

Thiết kế Cơ sở dữ liệu đơn giản

Chúng ta thiết kế bảng users gồm các trường như sau:

Mã nguồn SQL để thực hiện tạo bảng users trong MySQL:

Chúng ta lưu thành file Create_MySQL.sql.

Cấu hình Hệ quản trị phpMyAdmin

Bước 1.

Chúng ta khởi động LAMP Stack Control Panel.

Chúng ta start service MySQL DatabaseApache Web Server.

Bước 2.

Chúng ta mở giao diện phpMyAdmin trên trình duyệt với địa chỉ:

127.0.0.1:8080/phpmyadmin/

Chúng ta nhập usernamepassword để đăng nhập vào phpMyAdmin.

Ví dụ ở đây là:

Username : root

Password : adminadmin

Bước 3.

Giao diện màn hình chính của phpMyAdmin hiện ra.

Chúng ta nhận thấy địa chỉ chính thức của MySQL: localhost:3306.

Bước 4.

Chúng ta mở tab Databases trong phpMyAdmin.

Chúng ta nhập thông tin tạo database mới trong mục Create database:

firstdb

utf8_unicode_ci

Chúng ta lựa chọn nút Create để tạo database firstdb.

Bước 5.

Giao diện của database firstdb hiện ra.

Bước 6.

Chúng ta mở tab Import trong giao diện của firstdb.

Chúng ta lựa chọn file Create_MySQL.sql đã được tạo ra bên trên.

Chúng ta lựa chọn nút Go để thực hiện Import.

Bước 7.

Giao diện firstdb sau khi đã thực hiện import và tạo mới bảng users:

Bước 8.

Chúng ta lựa chọn bảng users.

Chúng ta lựa chọn tab Structure trong giao diện này:

Bước 9.

Chúng ta thực hiện stop service MySQL Database.

Chúng ta lựa chọn nút Configure để cấu hình các thông số.

Bước 10.

Cửa sổ Configure MySQL Database hiện ra.

Chúng ta nhận thấy Port 3306 của MySQL.

Chúng ta có thể để nguyên hoặc điều chỉnh theo yêu cầu thực tiễn.

Chúng ta lựa chọn nút Open Conf File để mở file cấu hình my.cnf.

Bước 11.

Nội dung file my.cnf hiện ra.

Chúng ta loại bỏ dòng “skip-name-resolve …”.

Chúng ta lưu lại file này.

Kỹ thuật cơ bản để kết nối và truy xuất Cơ sở dữ liệu MySQL

Bước 1.

Chúng ta tạo mới PHP Project trong Eclipse IDE và đặt tên là PHPFirstDBProject.

Bước 2.

Chúng ta tạo mới class DBConnection trong folder connection.

Bước 3.

Chúng ta định nghĩa các thuộc tính trong class DBConnection.

Ý nghĩa các thuộc tính như sau:

  • Thuộc tính $dbHost$dbPort lưu trữ thông tin về địa chỉ và cổng của MySQL.
  • Thuộc tính $dbName lưu trữ thông tin về tên của database. Ở đây chúng ta sử dụng database firstdb.
  • Thuộc tính $username$password lưu trữ thông tin về tên đăng nhập và mật khẩu để vào được MySQL.
  • Thuộc tính $conn lưu trữ thông tin về kết nối và truy xuất đến cơ sở dữ liệu.

Bước 4.

Chúng ta định nghĩa phương thức khởi tạo trong class DBConnection.

Bước 5.

Chúng ta định nghĩa phương thức đặc tả kết nối đến cơ sở dữ liệu.

Bước 6.

Chúng ta định nghĩa phương thức truy xuất để lấy dữ liệu.

Những kỹ thuật lập trình cần chú ý:

  • Phương thức này có 02 tham số. Tham số $sqlQuery lưu trữ câu truy vấn SQLSELECT …”. Tham số $results là một cấu trúc array dùng lưu trữ dữ liệu được trả về: (i) từ_khóa lưu trữ dữ liệu của trường khóa chính id trong bảng users; (ii) giá_trị là một cấu trúc array con có thứ tự trước sau lưu trữ dữ liệu của những trường còn lại trong bảng users.
  • Bước 1. Chúng ta thực hiện gọi phương thức kết nối: $this->getConnection().
  • Bước 2. Chúng ta thực hiện truy xuất dữ liệu và trả về một resultSet: $records = $this- >conn->query($sqlQuery).
  • Bước 3. Chúng ta lần lượt truy xuất từng bộ dữ liệu trong resultSet: while ($row = $records- >fetch_assoc()) {}.
  • Bước 4. Chúng ta thêm bộ dữ liệu hiện tại vào một phần tử trong $results. Chú ý: vị trí tương ứng và kiểu dữ liệu của trường tương ứng trong cơ sở dữ liệu.
  • Bước 5. Chúng ta thực hiện đóng phát biểu và kết nối: $records->free(); $this->conn- >close().

Bước 7.

Chúng ta định nghĩa phương thức thêm mới / chỉnh sửa / xóa bộ dữ liệu.

Bước 8.

Chúng ta thực hiện import những thư viện phù hợp trong class DBConnection để thực hiện định nghĩa các phương thức trên:

Bước 9.

Chúng ta thực hiện tạo thực thể của DBConnection trong file index.php.

Bước 10.

Chúng thực hiện thử nghiệm thêm mới bộ dữ liệu.

Bước 11.

Chúng ta kiểm tra trong phpMyAdmin xem bộ dữ liệu mới đã được thêm thành công hay chưa.

Bước 12.

Chúng thực hiện thử nghiệm truy xuất toàn bộ dữ liệu.

Bước 13.

Chúng ta thực thi project để kiểm tra kết quả.

Tổng kết

Trong bài này, chúng ta đã cùng nhau tìm hiểu một số kỹ thuật cơ bản để kết nối và truy xuất đến Cơ sở dữ liệu MySQL thực hiện bằng ngôn ngữ PHP.

Hy vọng rằng chúng ta có thể áp dụng phù hợp những kỹ thuật và chức năng này cho những bài tiếp theo.

Kỹ thuật cơ bản để kết nối và truy xuất Cơ sở dữ liệu MySQL – Python

Giới thiệu

Trong nội dung bài này, chúng ta cùng nhau tìm hiểu kỹ thuật cơ bản trong Python để kết nối và truy vấn Cơ sở dữ liệu MySQL.

Những nội dung chính được trình bày trong bài này:

  • Thiết kế một bảng cơ sở dữ liệu đơn giản gồm một số các trường cơ bản.
  • Cấu hình Hệ quản trị phpMyAdmin để thực hiện việc kết nối và truy xuất được thuận tiện.
  • Kỹ thuật cơ bản trong Python bao gồm việc thêm mới dữ liệu và truy xuất toàn bộ dữ liệu trong bảng.

Thiết kế Cơ sở dữ liệu đơn giản

Chúng ta thiết kế bảng users gồm các trường như sau:

Mã nguồn SQL để thực hiện tạo bảng users trong MySQL:

Chúng ta lưu thành file Create_MySQL.sql.

Cấu hình Hệ quản trị phpMyAdmin

Bước 1.

Chúng ta khởi động LAMP Stack Control Panel.

Chúng ta start service MySQL DatabaseApache Web Server.

Bước 2.

Chúng ta mở giao diện phpMyAdmin trên trình duyệt với địa chỉ:

127.0.0.1:8080/phpmyadmin/

Chúng ta nhập usernamepassword để đăng nhập vào phpMyAdmin.

Ví dụ ở đây là:

Username : root

Password : adminadmin

Bước 3.

Giao diện màn hình chính của phpMyAdmin hiện ra.

Chúng ta nhận thấy địa chỉ chính thức của MySQL: localhost:3306.

Bước 4.

Chúng ta mở tab Databases trong phpMyAdmin.

Chúng ta nhập thông tin tạo database mới trong mục Create database:

firstdb

utf8_unicode_ci

Chúng ta lựa chọn nút Create để tạo database firstdb.

Bước 5.

Giao diện của database firstdb hiện ra.

Bước 6.

Chúng ta mở tab Import trong giao diện của firstdb.

Chúng ta lựa chọn file Create_MySQL.sql đã được tạo ra bên trên.

Chúng ta lựa chọn nút Go để thực hiện Import.

Bước 7.

Giao diện firstdb sau khi đã thực hiện import và tạo mới bảng users:

Bước 8.

Chúng ta lựa chọn bảng users.

Chúng ta lựa chọn tab Structure trong giao diện này:

Bước 9.

Chúng ta thực hiện stop service MySQL Database.

Chúng ta lựa chọn nút Configure để cấu hình các thông số.

Bước 10.

Cửa sổ Configure MySQL Database hiện ra.

Chúng ta nhận thấy Port 3306 của MySQL.

Chúng ta có thể để nguyên hoặc điều chỉnh theo yêu cầu thực tiễn.

Chúng ta lựa chọn nút Open Conf File để mở file cấu hình my.cnf.

Bước 11.

Nội dung file my.cnf hiện ra.

Chúng ta loại bỏ dòng “skip-name-resolve …”.

Chúng ta lưu lại file này.

Bước 12.

Chúng ta thực hiện cài đặt MySQL Connector/Python trong Anaconda.

Kỹ thuật cơ bản để kết nối và truy xuất Cơ sở dữ liệu MySQL

Bước 1.

Chúng ta tạo mới PyDev Project trong Eclipse IDE và đặt tên là PythonFirstDBProject.

Bước 2.

Chúng ta tạo mới module DBConnection trong package connection.

Bước 3.

Chúng ta định nghĩa các thuộc tính trong phương thức khởi tạo trong module DBConnection.

Ý nghĩa các thuộc tính như sau:

  • Thuộc tính dbHostdbPort lưu trữ thông tin về địa chỉ và cổng của MySQL.
  • Thuộc tính dbName lưu trữ thông tin về tên của database. Ở đây chúng ta sử dụng database firstdb.
  • Thuộc tính usernamepassword lưu trữ thông tin về tên đăng nhập và mật khẩu để vào được MySQL.
  • Thuộc tính conn lưu trữ thông tin về kết nối và truy xuất đến cơ sở dữ liệu.

Bước 4.

Chúng ta định nghĩa phương thức đặc tả kết nối đến cơ sở dữ liệu.

Bước 5.

Chúng ta định nghĩa phương thức truy xuất để lấy dữ liệu.

Những kỹ thuật lập trình cần chú ý:

  • Phương thức này có 02 tham số. Tham số sqlQuery lưu trữ câu truy vấn SQLSELECT …”. Tham số results là một cấu trúc Dictionary dùng lưu trữ dữ liệu được trả về: (i) từ_khóa lưu trữ dữ liệu của trường khóa chính id trong bảng users; (ii) giá_trị là một danh sách deque có thứ tự trước sau lưu trữ dữ liệu của những trường còn lại trong bảng users.
  • Bước 1. Chúng ta thực hiện gọi phương thức kết nối: self.getConnection().
  • Bước 2. Chúng ta thực hiện tạo một phát biểu: cursor = self.Conn.cursor().
  • Bước 3. Chúng ta thực hiện truy xuất dữ liệu: cursor.execute(sqlQuery).
  • Bước 4. Chúng ta trả về một resultSet: records = cursor.fetchall().
  • Bước 5. Chúng ta lần lượt truy xuất từng bộ dữ liệu trong resultSet: for row in records.
  • Bước 6. Chúng ta thêm bộ dữ liệu hiện tại vào một phần tử trong resultSet. Chú ý: vị trí tương ứng và kiểu dữ liệu của trường tương ứng trong cơ sở dữ liệu.
  • Bước 7. Chúng ta thực hiện đóng phát biểu và kết nối: cursor.close(); self.Conn.close().

Bước 6.

Chúng ta định nghĩa phương thức thêm mới / chỉnh sửa / xóa bộ dữ liệu.

Bước 7.

Chúng ta thực hiện import những thư viện phù hợp trong module DBConnection để thực hiện định nghĩa các phương thức trên:

Bước 8.

Chúng ta thực hiện tạo thực thể của DBConnection trong module Main.

Bước 9.

Chúng thực hiện thử nghiệm thêm mới bộ dữ liệu.

Bước 10.

Chúng ta kiểm tra trong phpMyAdmin xem bộ dữ liệu mới đã được thêm thành công hay chưa.

Bước 11.

Chúng thực hiện thử nghiệm truy xuất toàn bộ dữ liệu.

Bước 12.

Chúng ta thực thi project để kiểm tra kết quả.

Tổng kết

Trong bài này, chúng ta đã cùng nhau tìm hiểu một số kỹ thuật cơ bản để kết nối và truy xuất đến Cơ sở dữ liệu MySQL thực hiện bằng ngôn ngữ Python.

Hy vọng rằng chúng ta có thể áp dụng phù hợp những kỹ thuật và chức năng này cho những bài tiếp theo.

Kỹ thuật cơ bản để kết nối và truy xuất Cơ sở dữ liệu MySQL – Csharp

Giới thiệu

Trong nội dung bài này, chúng ta cùng nhau tìm hiểu kỹ thuật cơ bản trong Csharp để kết nối và truy vấn Cơ sở dữ liệu MySQL.

Những nội dung chính được trình bày trong bài này:

  • Thiết kế một bảng cơ sở dữ liệu đơn giản gồm một số các trường cơ bản.
  • Cấu hình Hệ quản trị phpMyAdmin để thực hiện việc kết nối và truy xuất được thuận tiện.
  • Kỹ thuật cơ bản trong Csharp bao gồm việc thêm mới dữ liệu và truy xuất toàn bộ dữ liệu trong bảng.

Thiết kế Cơ sở dữ liệu đơn giản

Chúng ta thiết kế bảng users gồm các trường như sau:

Mã nguồn SQL để thực hiện tạo bảng users trong MySQL:

Chúng ta lưu thành file Create_MySQL.sql.

Cấu hình Hệ quản trị phpMyAdmin

Bước 1.

Chúng ta khởi động LAMP Stack Control Panel.

Chúng ta start service MySQL DatabaseApache Web Server.

Bước 2.

Chúng ta mở giao diện phpMyAdmin trên trình duyệt với địa chỉ:

127.0.0.1:8080/phpmyadmin/

Chúng ta nhập usernamepassword để đăng nhập vào phpMyAdmin.

Ví dụ ở đây là:

Username : root

Password : adminadmin

Bước 3.

Giao diện màn hình chính của phpMyAdmin hiện ra.

Chúng ta nhận thấy địa chỉ chính thức của MySQL: localhost:3306.

Bước 4.

Chúng ta mở tab Databases trong phpMyAdmin.

Chúng ta nhập thông tin tạo database mới trong mục Create database:

firstdb

utf8_unicode_ci

Chúng ta lựa chọn nút Create để tạo database firstdb.

Bước 5.

Giao diện của database firstdb hiện ra.

Bước 6.

Chúng ta mở tab Import trong giao diện của firstdb.

Chúng ta lựa chọn file Create_MySQL.sql đã được tạo ra bên trên.

Chúng ta lựa chọn nút Go để thực hiện Import.

Bước 7.

Giao diện firstdb sau khi đã thực hiện import và tạo mới bảng users:

Bước 8.

Chúng ta lựa chọn bảng users.

Chúng ta lựa chọn tab Structure trong giao diện này:

Bước 9.

Chúng ta thực hiện stop service MySQL Database.

Chúng ta lựa chọn nút Configure để cấu hình các thông số.

Bước 10.

Cửa sổ Configure MySQL Database hiện ra.

Chúng ta nhận thấy Port 3306 của MySQL.

Chúng ta có thể để nguyên hoặc điều chỉnh theo yêu cầu thực tiễn.

Chúng ta lựa chọn nút Open Conf File để mở file cấu hình my.cnf.

Bước 11.

Nội dung file my.cnf hiện ra.

Chúng ta loại bỏ dòng “skip-name-resolve …”.

Chúng ta lưu lại file này.

Bước 12.

Chúng ta thực hiện download MySQL Connector/NET 8.0.16 tại địa chỉ như sau:

Bước 13.

Chúng ta giải nén file zip được download:

Bước 14.

Chúng ta chú ý đến file MySQL.Data.dll trong thư mục v4.5.2 được giải nén.

Kỹ thuật cơ bản để kết nối và truy xuất Cơ sở dữ liệu MySQL

Bước 1.

Chúng ta tạo mới Console Project trong MonoDevelop và đặt tên là CsharpFirstDBProject.

Bước 2.

Chúng ta tạo mới class DBConnection trong folder Connection.

Bước 3.

Chúng ta nhấn chuột phải vào mục References và lựa chọn Edit References.

Bước 4.

Cửa sổ Edit References hiện ra.

Chúng ta nhập thông tin như sau:

Chúng ta lựa chọn nút Browse để lựa chọn thư viện.

Bước 5.

Cửa sổ Select Assembly hiện ra.

Chúng ta lựa chọn file MySQL.Data.dll trong thư mục v.4.5.2 bên trên.

Chúng ta lựa chọn nút Open để thực hiện.

Bước 6.

Cửa sổ Edit References hiện ra.

Chúng ta lựa chọn nút OK để thực hiện.

Bước 7.

Màn hình chính của project hiện ra.

Chúng ta nhận thấy thư viện MySQL.Data đã xuất hiện trong mục References.

Bước 8.

Chúng ta tiếp tục thực hiện thêm thư viện System.Data vào References.

Bước 9.

Chúng ta định nghĩa các thuộc tính trong class DBConnection.

Ý nghĩa các thuộc tính như sau:

  • Thuộc tính dbHostdbPort lưu trữ thông tin về địa chỉ và cổng của MySQL.
  • Thuộc tính dbName lưu trữ thông tin về tên của database. Ở đây chúng ta sử dụng database firstdb.
  • Thuộc tính usernamepassword lưu trữ thông tin về tên đăng nhập và mật khẩu để vào được MySQL.
  • Thuộc tính conn lưu trữ thông tin về kết nối và truy xuất đến cơ sở dữ liệu.

Bước 10.

Chúng ta định nghĩa phương thức khởi tạo trong class DBConnection.

Bước 11.

Chúng ta định nghĩa phương thức đặc tả kết nối đến cơ sở dữ liệu.

Bước 12.

Chúng ta định nghĩa phương thức truy xuất để lấy dữ liệu.

Những kỹ thuật lập trình cần chú ý:

  • Phương thức này có 02 tham số. Tham số sqlQuery lưu trữ câu truy vấn SQLSELECT …”. Tham số results là một cấu trúc Dictionary dùng lưu trữ dữ liệu được trả về: (i) từ_khóa lưu trữ dữ liệu của trường khóa chính id trong bảng users; (ii) giá_trị là một danh sách có thứ tự trước sau lưu trữ dữ liệu của những trường còn lại trong bảng users.
  • Bước 1. Chúng ta thực hiện gọi phương thức kết nối: GetConnection().
  • Bước 2. Chúng ta thực hiện tạo một phát biểu: MySqlCommand cmd = new MySqlCommand(sqlQuery, conn).
  • Bước 3. Chúng ta thực hiện truy xuất dữ liệu và trả về một data reader: MySqlDataReader rdr = cmd.ExecuteReader().
  • Bước 4. Chúng ta lần lượt truy xuất từng bộ dữ liệu trong data reader: while (rdr.Read()) {}.
  • Bước 5. Chúng ta thêm bộ dữ liệu hiện tại vào một phần tử trong data reader. Chú ý: vị trí tương ứng và kiểu dữ liệu của trường tương ứng trong cơ sở dữ liệu.
  • Bước 6. Chúng ta thực hiện đóng phát biểu và kết nối: rdr.Close(); conn.Close().

Bước 13.

Chúng ta định nghĩa phương thức thêm mới / chỉnh sửa / xóa bộ dữ liệu.

Bước 14.

Chúng ta thực hiện import những thư viện phù hợp trong class DBConnection để thực hiện định nghĩa các phương thức trên:

Bước 15.

Chúng ta thực hiện tạo thực thể của DBConnection trong phương thức Main() của class Program.

Bước 16.

Chúng thực hiện thử nghiệm thêm mới bộ dữ liệu.

Bước 17.

Chúng ta kiểm tra trong phpMyAdmin xem bộ dữ liệu mới đã được thêm thành công hay chưa.

Bước 18.

Chúng thực hiện thử nghiệm truy xuất toàn bộ dữ liệu.

Bước 19.

Chúng ta thực thi project để kiểm tra kết quả.

Tổng kết

Trong bài này, chúng ta đã cùng nhau tìm hiểu một số kỹ thuật cơ bản để kết nối và truy xuất đến Cơ sở dữ liệu MySQL thực hiện bằng ngôn ngữ Csharp.

Hy vọng rằng chúng ta có thể áp dụng phù hợp những kỹ thuật và chức năng này cho những bài tiếp theo.

Kỹ thuật cơ bản để kết nối và truy xuất Cơ sở dữ liệu MySQL – Java

Giới thiệu

Trong nội dung bài này, chúng ta cùng nhau tìm hiểu kỹ thuật cơ bản trong Java để kết nối và truy vấn Cơ sở dữ liệu MySQL.

Những nội dung chính được trình bày trong bài này:

  • Thiết kế một bảng cơ sở dữ liệu đơn giản gồm một số các trường cơ bản.
  • Cấu hình Hệ quản trị phpMyAdmin để thực hiện việc kết nối và truy xuất được thuận tiện.
  • Kỹ thuật cơ bản trong Java bao gồm việc thêm mới dữ liệu và truy xuất toàn bộ dữ liệu trong bảng.

Thiết kế Cơ sở dữ liệu đơn giản

Chúng ta thiết kế bảng users gồm các trường như sau:

Mã nguồn SQL để thực hiện tạo bảng users trong MySQL:

Chúng ta lưu thành file Create_MySQL.sql.

Cấu hình Hệ quản trị phpMyAdmin

Bước 1.

Chúng ta khởi động LAMP Stack Control Panel.

Chúng ta start service MySQL DatabaseApache Web Server.

Bước 2.

Chúng ta mở giao diện phpMyAdmin trên trình duyệt với địa chỉ:

127.0.0.1:8080/phpmyadmin/

Chúng ta nhập usernamepassword để đăng nhập vào phpMyAdmin.

Ví dụ ở đây là:

Username : root

Password : adminadmin

Bước 3.

Giao diện màn hình chính của phpMyAdmin hiện ra:

Chúng ta nhận thấy địa chỉ chính thức của MySQL: localhost:3306.

Bước 4.

Chúng ta mở tab Databases trong phpMyAdmin.

Chúng ta nhập thông tin tạo database mới trong mục Create database:

firstdb

utf8_unicode_ci

Chúng ta lựa chọn nút Create để tạo database firstdb.

Bước 5.

Giao diện của database firstdb hiện ra.

Bước 6.

Chúng ta mở tab Import trong giao diện của firstdb.

Chúng ta lựa chọn file Create_MySQL.sql đã được tạo ra bên trên.

Chúng ta lựa chọn nút Go để thực hiện Import.

Bước 7.

Giao diện firstdb sau khi đã thực hiện import và tạo mới bảng users:

Bước 8.

Chúng ta lựa chọn bảng users.

Chúng ta lựa chọn tab Structure trong giao diện này:

Bước 9.

Chúng ta thực hiện stop service MySQL Database.

Chúng ta lựa chọn nút Configure để cấu hình các thông số.

Bước 10.

Cửa sổ Configure MySQL Database hiện ra.

Chúng ta nhận thấy Port 3306 của MySQL.

Chúng ta có thể để nguyên hoặc điều chỉnh theo yêu cầu thực tiễn.

Chúng ta lựa chọn nút Open Conf File để mở file cấu hình my.cnf.

Bước 11.

Nội dung file my.cnf hiện ra.

Chúng ta loại bỏ dòng “skip-name-resolve …”.

Chúng ta lưu lại file này.

Bước 12.

Chúng ta thực hiện download MySQL Connector/J 8.0 tại địa chỉ như sau:

Bước 13.

Màn hình bắt đầu download mysql-connector-java-5.1.48.zip hiện ra.

Kỹ thuật cơ bản để kết nối và truy xuất Cơ sở dữ liệu MySQL

Bước 1.

Chúng ta tạo mới Java Project trong Eclipse IDE và đặt tên là JavaFirstDBProject.

Bước 2.

Chúng ta tạo mới class DBConnection trong package connection.

Bước 3.

Chúng ta nhấn chuột phải vào tên project và lựa chọn New → Folder.

Bước 4.

Cửa sổ New Folder hiện ra.

Chúng ta nhập thông tin như sau:

Chúng ta lựa chọn nút Finish để thực hiện.

Bước 5.

Chúng ta thực hiện chép file mysql-connector-java-5.1.48.jar vào thư mục lib vừa được tạo ra.

Bước 6.

Chúng ta nhấn chuột phải vào tên project và lựa chọn Properties.

Bước 7.

Cửa sổ Properties for JavaFirstDBProject hiện ra.

Chúng ta lựa chọn tab Java Build Path trong cửa sổ bên trái.

Chúng ta lựa chọn tab Libraries trong Java Build Path.

Chúng ta lựa chọn nút Add JARs…

Bước 8.

Cửa sổ JAR Selection hiện ra.

Chúng ta lựa chọn file mysql-connector-java-5.1.48.jar trong thư mục lib.

Chúng ta lựa chọn nút OK để thực hiện.

Bước 9.

Cửa sổ Properties for JavaFirstDBProject hiện ra.

Chúng ta lựa chọn nút Apply and Close để thực hiện.

Bước 10.

Màn hình chính của project hiện ra.

Chúng ta nhận thấy file mysql-connector-java-5.1.48.jar đã xuất hiện trong mục Referenced Libraries.

Bước 11.

Chúng ta định nghĩa các thuộc tính trong class DBConnection.

Ý nghĩa các thuộc tính như sau:

  • Thuộc tính dbType lưu trữ thông tin về loại cơ sở dữ liệu. Ở đây chúng ta sử dụng MySQL.
  • Thuộc tính dbHostdbPort lưu trữ thông tin về địa chỉ và cổng của MySQL.
  • Thuộc tính dbName lưu trữ thông tin về tên của database. Ở đây chúng ta sử dụng database firstdb.
  • Thuộc tính usernamepassword lưu trữ thông tin về tên đăng nhập và mật khẩu để vào được MySQL.
  • Thuộc tính driver lưu trữ thông tin về bộ phận điều khiển kết nối và truy xuất đến cơ sở dữ liệu.
  • Thuộc tính conn lưu trữ thông tin về kết nối và truy xuất đến cơ sở dữ liệu.

Bước 12.

Chúng ta định nghĩa phương thức khởi tạo trong class DBConnection.

Bước 13.

Chúng ta định nghĩa phương thức đặc tả kết nối đến cơ sở dữ liệu.

Những kỹ thuật lập trình cần chú ý:

  • Trước tiên chúng ta cần truy xuất đến driver của cơ sở dữ liệu tương ứng: Class.forName(driver).
  • Tiếp đến chúng ta thực hiện việc kết nối thử đến cơ sở dữ liệu: conn = DriverManager.getConnection(dbUrl, username, password).
  • Chúng ta thực hiện bắt lỗi bằng kỹ thuật: try {} catch {}.

Bước 14.

Chúng ta định nghĩa phương thức truy xuất để lấy dữ liệu.

Những kỹ thuật lập trình cần chú ý:

  • Phương thức này có 02 tham số. Tham số sqlQuery lưu trữ câu truy vấn SQLSELECT …”. Tham số results là một cấu trúc map dùng lưu trữ dữ liệu được trả về: (i) từ_khóa lưu trữ dữ liệu của trường khóa chính id trong bảng users; (ii) giá_trị là một danh sách có thứ tự trước sau lưu trữ dữ liệu của những trường còn lại trong bảng users.
  • Bước 1. Chúng ta thực hiện gọi phương thức kết nối: getConnection().
  • Bước 2. Chúng ta thực hiện tạo một phát biểu: Statement stat = conn.createStatement().
  • Bước 3. Chúng ta thực hiện truy xuất dữ liệu và trả về một resultSet: ResultSet rs = stat.executeQuery(sqlQuery).
  • Bước 4. Chúng ta lần lượt truy xuất từng bộ dữ liệu trong resultSet: while (rs.next()) {}.
  • Bước 5. Chúng ta thêm bộ dữ liệu hiện tại vào một phần tử trong results. Chú ý: vị trí tương ứng và kiểu dữ liệu của trường tương ứng trong cơ sở dữ liệu.
  • Bước 6. Chúng ta thực hiện đóng phát biểu và kết nối: stat.close(); conn.close().

Bước 15.

Chúng ta định nghĩa phương thức thêm mới / chỉnh sửa / xóa bộ dữ liệu.

Bước 16.

Chúng ta thực hiện import những thư viện phù hợp trong class DBConnection để thực hiện định nghĩa các phương thức trên:

Bước 17.

Chúng ta thực hiện tạo thực thể của DBConnection trong phương thức main() của class Main.

Bước 18.

Chúng thực hiện thử nghiệm thêm mới bộ dữ liệu.

Bước 19.

Chúng ta kiểm tra trong phpMyAdmin xem bộ dữ liệu mới đã được thêm thành công hay chưa.

Bước 20.

Chúng thực hiện thử nghiệm truy xuất toàn bộ dữ liệu.

Bước 21.

Chúng ta thực thi project để kiểm tra kết quả.

Tổng kết

Trong bài này, chúng ta đã cùng nhau tìm hiểu một số kỹ thuật cơ bản để kết nối và truy xuất đến Cơ sở dữ liệu MySQL thực hiện bằng ngôn ngữ Java.

Hy vọng rằng chúng ta có thể áp dụng phù hợp những kỹ thuật và chức năng này cho những bài tiếp theo.

Ước số / bội số – Python

Giới thiệu

Trong nội dung bài này, chúng ta cùng nhau tìm hiểu một số bài toán cơ bản về ước số và bội số:

  • Tìm ước số chung lớn nhất của hai số tự nhiên.
  • Tìm bộ số chung nhỏ nhất của hai số tự nhiên.
  • Phân tích một số tự nhiên thành các thừa số nguyên tố.
  • Tính số lượng các ước số của một số tự nhiên.
  • Tính tổng các ước số của một số tự nhiên.

Ước số chung lớn nhất của hai số

Ý tưởng giải thuật

Ước số chung lớn nhất (USCLN) của 2 số được tính theo thuật toán Euclid:

UCLN (a, b) = UCLN (b, (a mod b))

Bước 1.

Chúng ta tạo một PyDev Project trong Eclipse IDE và đặt tên là PythonAlgorithmSecondProject.

Chúng ta tiếp tục tạo package mainmodule Main.py cùng phương thức main() mặc định.

Bước 2.

Chúng ta tạo package algorithmmodule UocBoi.py.

Bước 3.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Python như sau:

Bội số chung nhỏ nhất của hai số

Ý tưởng giải thuật

Bội số chung nhỏ nhất (BSCNN) của hai số được tính theo công thức:

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Python như sau:

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức tinhUCLN()tinhBCNN() trong module Main.py như sau:

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Phân tích thừa số nguyên tố

Ý tưởng giải thuật

Chúng ta thực hiện chia số N cho các số nguyên tố trong đoạn [2; N].

  • Với mỗi số nguyên tố đó, đếm số lần mà số N chia hết.
  • Sau mỗi lần chia cho số i, số N của chúng ta sẽ giảm đi i lần.
  • Chúng ta dừng quá trình chia khi số chia lớn hơn N.

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Python như sau:

Những kỹ thuật lập trình cần chú ý:

  • Chúng ta sử dụng kiểu dữ liệu Dictionary của Python để lưu trữ tập hợp không giới hạn các phần tử theo từng cặp <từ_khóa, giá_trị>. Mỗi phần tử là một cặp: từ_khóa là thừa số nguyên tố; giá_trị là số mũ tương ứng với thừa số nguyên tố này.

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức phanTichTSNT() trong module Main.py như sau:

Những kỹ thuật lập trình cần chú ý:

  • Cách thức để duyệt từng phần tử trong Dictionary để lấy ra được cả từ_khóagiá_trị là: for (từ_khóa, $giá_trị in dic.items) {}.

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Số các ước số của một số

Ý tưởng giải thuật

Giả sử N được phân tích thành thừa số nguyên tố như sau:

Số các ước số của N là

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Python như sau:

Tổng các ước số của một số

Ý tưởng giải thuật

Tổng các ước của N là

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Python như sau:

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức tinhSoUocSo()tinhTongUocSo() trong module Main.py như sau:

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Tổng kết

Trong bài này, chúng ta đã cùng nhau tìm hiểu một số giải thuật cơ bản xung quanh ước số và bội số của một số tự nhiên và thực hiện bằng ngôn ngữ Python.

Hy vọng rằng chúng ta có thể áp dụng phù hợp những kỹ thuật và chức năng này cho những bài tiếp theo.

Ước số / bội số – PHP

Giới thiệu

Trong nội dung bài này, chúng ta cùng nhau tìm hiểu một số bài toán cơ bản về ước số và bội số:

  • Tìm ước số chung lớn nhất của hai số tự nhiên.
  • Tìm bội số chung nhỏ nhất của hai số tự nhiên.
  • Phân tích một số tự nhiên thành các thừa số nguyên tố.
  • Tính số lượng các ước số của một số tự nhiên.
  • Tính tổng các ước số của một số tự nhiên.

Ước số chung lớn nhất của hai số

Ý tưởng giải thuật

Ước số chung lớn nhất (USCLN) của 2 số được tính theo thuật toán Euclid:

UCLN (a, b) = UCLN (b, (a mod b))

Bước 1.

Chúng ta tạo một PHP Project trong Eclipse IDE và đặt tên là PHPAlgorithmSecondProject.

Bước 2.

Chúng ta tạo folder algorithmclass UocBoi.php.

Bước 3.

Chúng ta thực hiện giải thuật bằng ngôn ngữ PHP như sau:

Bội số chung nhỏ nhất của hai số

Ý tưởng giải thuật

Bội số chung nhỏ nhất (BSCNN) của hai số được tính theo công thức:

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ PHP như sau:

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức tinhUCLN()tinhBCNN() trong file index.php như sau:

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Phân tích thừa số nguyên tố

Ý tưởng giải thuật

Chúng ta thực hiện chia số N cho các số nguyên tố trong đoạn [2; N].

  • Với mỗi số nguyên tố đó, đếm số lần mà số N chia hết.
  • Sau mỗi lần chia cho số i, số N của chúng ta sẽ giảm đi i lần.
  • Chúng ta dừng quá trình chia khi số chia lớn hơn N.

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ PHP như sau:

Những kỹ thuật lập trình cần chú ý:

  • Chúng ta sử dụng kiểu dữ liệu array của PHP để lưu trữ tập hợp không giới hạn các phần tử theo từng cặp <từ_khóa, giá_trị>. Mỗi phần tử là một cặp: từ_khóa là thừa số nguyên tố; giá_trị là số mũ tương ứng với thừa số nguyên tố này.
  • Để thêm / xóa / sửa phần tử trong array đóng vai trò là tham số của một phương thức, chúng ta xác định vị trí con trỏ bằng cách thêm & vào trước tham số này.

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức phanTichTSNT() trong file index.php như sau:

Những kỹ thuật lập trình cần chú ý:

  • Cách thức để duyệt từng phần tử trong array để lấy ra được cả từ_khóagiá_trị là: foreach ($arr as $từ_khóa => $giá_trị) {}.

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Số các ước số của một số

Ý tưởng giải thuật

Giả sử N được phân tích thành thừa số nguyên tố như sau:

Số các ước số của N là

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ PHP như sau:

Tổng các ước số của một số

Ý tưởng giải thuật

Tổng các ước của N là

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ PHP như sau:

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức tinhSoUocSo()tinhTongUocSo() trong file index.php như sau:

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Tổng kết

Trong bài này, chúng ta đã cùng nhau tìm hiểu một số giải thuật cơ bản xung quanh ước số và bội số của một số tự nhiên và thực hiện bằng ngôn ngữ PHP.

Hy vọng rằng chúng ta có thể áp dụng phù hợp những kỹ thuật và chức năng này cho những bài tiếp theo.

Ước số / bội số – Csharp

Giới thiệu

Trong nội dung bài này, chúng ta cùng nhau tìm hiểu một số bài toán cơ bản về ước số và bội số:

  • Tìm ước số chung lớn nhất của hai số tự nhiên.
  • Tìm bội số chung nhỏ nhất của hai số tự nhiên.
  • Phân tích một số tự nhiên thành các thừa số nguyên tố.
  • Tính số lượng các ước số của một số tự nhiên.
  • Tính tổng các ước số của một số tự nhiên.

Ước số chung lớn nhất của hai số

Ý tưởng giải thuật

Ước số chung lớn nhất (USCLN) của 2 số được tính theo thuật toán Euclid:

UCLN (a, b) = UCLN (b, (a mod b))

Bước 1.

Chúng ta tạo một Console Project trong MonoDevelop và đặt tên là CsharpAlgorithmSecondProject.

Bước 2.

Chúng ta tạo folder Algorithmclass UocBoi.cs.

Bước 3.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Csharp như sau:

Bội số chung nhỏ nhất của hai số

Ý tưởng giải thuật

Bội số chung nhỏ nhất (BSCNN) của hai số được tính theo công thức:

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Csharp như sau:

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức TinhUCLN()TinhBCNN() trong class Program.cs như sau:

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Phân tích thừa số nguyên tố

Ý tưởng giải thuật

Chúng ta thực hiện chia số N cho các số nguyên tố trong đoạn [2; N].

  • Với mỗi số nguyên tố đó, đếm số lần mà số N chia hết.
  • Sau mỗi lần chia cho số i, số N của chúng ta sẽ giảm đi i lần.
  • Chúng ta dừng quá trình chia khi số chia lớn hơn N.

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Csharp như sau:

Những kỹ thuật lập trình cần chú ý:

  • Chúng ta sử dụng kiểu dữ liệu Dictionary của Csharp để lưu trữ tập hợp không giới hạn các phần tử theo từng cặp <từ_khóa, giá trị>. Mỗi phần tử là một cặp: từ_khóa là thừa số nguyên tố; giá_trị là số mũ tương ứng với thừa số nguyên tố này.
  • Do thừa số nguyên tố và số mũ đều là số nguyên, chúng ta định nghĩa kiểu dữ liệu tập hợp là Dictionary<int, int>.

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức PhanTichTSNT() trong class Program.cs như sau:

Những kỹ thuật lập trình cần chú ý:

  • Chúng ta sử dụng lớp thư viện StringBuilder để xử lý một số tác vụ liên quan đến chuỗi.
  • Phương thức Append() của StringBuilder thực hiện nối một chuỗi mới vào chuỗi hiện có.
  • Cách thức duyệt từng phần tử trong Dictionary là sử dụng kiểu dữ liệu KeyValuePair<>. Từng phần tử được truy xuất sẽ có thể lấy ra được từ_khóaKeygiá_trịValue.

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Số các ước số của một số

Ý tưởng giải thuật

Giả sử N được phân tích thành thừa số nguyên tố như sau:

Số các ước số của N là

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Csharp như sau:

Tổng các ước số của một số

Ý tưởng giải thuật

Tổng các ước của N là

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Csharp như sau:

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức TinhSoUocSo()TinhTongUocSo() trong class Program.cs như sau:

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Tổng kết

Trong bài này, chúng ta đã cùng nhau tìm hiểu một số giải thuật cơ bản xung quanh ước số và bội số của một số tự nhiên và thực hiện bằng ngôn ngữ Csharp.

Hy vọng rằng chúng ta có thể áp dụng phù hợp những kỹ thuật và chức năng này cho những bài tiếp theo.

Ước số / bội số – Java

Giới thiệu

Trong nội dung bài này, chúng ta cùng nhau tìm hiểu một số bài toán cơ bản về ước số và bội số:

  • Tìm ước số chung lớn nhất của hai số tự nhiên.
  • Tìm bộ số chung nhỏ nhất của hai số tự nhiên.
  • Phân tích một số tự nhiên thành các thừa số nguyên tố.
  • Tính số lượng các ước số của một số tự nhiên.
  • Tính tổng các ước số của một số tự nhiên.

Ước số chung lớn nhất của hai số

Ý tưởng giải thuật

Ước số chung lớn nhất (USCLN) của 2 số được tính theo thuật toán Euclid:

UCLN (a, b) = UCLN (b, (a mod b))

Bước 1

Chúng ta tạo một Java Project trong Eclipse IDE và đặt tên là JavaAlgorithmSecondProject.

Chúng ta tiếp tục tạo package mainclass Main.java cùng phương thức main() mặc định.

Bước 2.

Chúng ta tạo package algorithmclass UocBoi.java.

Bước 3.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Java như sau:

Bội số chung nhỏ nhất của hai số

Ý tưởng giải thuật

Bội số chung nhỏ nhất (BSCNN) của hai số được tính theo công thức:

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Java như sau:

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức tinhUCLN()tinhBCNN() trong class Main.java như sau:

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Phân tích thừa số nguyên tố

Ý tưởng giải thuật

Chúng ta thực hiện chia số N cho các số nguyên tố trong đoạn [2; N].

  • Với mỗi số nguyên tố đó, đếm số lần mà số N chia hết.
  • Sau mỗi lần chia cho số i, số N của chúng ta sẽ giảm đi i lần.
  • Chúng ta dừng quá trình chia khi số chia lớn hơn N.

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Java như sau:

Những kỹ thuật lập trình cần chú ý:

  • Chúng ta sử dụng kiểu dữ liệu Map của Java để lưu trữ tập hợp không giới hạn các phần tử theo từng cặp <từ_khóa, giá_trị> . Mỗi phần tử là một cặp: từ_khóa là thừa số nguyên tố; giá_trị là số mũ tương ứng với thừa số nguyên tố này.
  • Do thừa số nguyên tố và số mũ đều là số nguyên, chúng ta định nghĩa kiểu dữ liệu tập hợp là Map<Integer, Integer>.

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức phanTichTSNT() trong class Main.java như sau:

Những kỹ thuật lập trình cần chú ý:

  • Chúng ta sử dụng lớp thư viện StringBuilder để xử lý một số tác vụ liên quan đến chuỗi.
  • Phương thức append() của StringBuilder thực hiện nối một chuỗi mới vào chuỗi hiện có.
  • Phương thức keySet() của Map<> trả về một danh sách kiểu Set<> của Java, lưu trữ các phần tử là từ khóa trong Map.
  • Phương thức get() của Map có đặc điểm: tham số là từ khóa; trả về kết quả là giá trị tương ứng.

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Số các ước số của một số

Ý tưởng giải thuật

Giả sử N được phân tích thành thừa số nguyên tố như sau:

Số các ước số của N là

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Java như sau:

Tổng các ước số của một số

Ý tưởng giải thuật

Tổng các ước của N là

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ Java như sau:

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức tinhSoUocSo()tinhTongUocSo() trong class Main.java như sau:

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Tổng kết

Trong bài này, chúng ta đã cùng nhau tìm hiểu một số giải thuật cơ bản xung quanh ước số và bội số của một số tự nhiên và thực hiện bằng ngôn ngữ Java.

Hy vọng rằng chúng ta có thể áp dụng phù hợp những kỹ thuật và chức năng này cho những bài tiếp theo.

Lập trình hướng đối tượng – Phần 3 – Tính chất đa hình (polymorphism), lớp trừu tượng (abstract class) và giao diện (interface) – Python

Giới thiệu

Trong nội dung bài viết này, chúng ta cùng nhau tìm hiểu cách thức mà Java hỗ trợ việc thực hiện những thuật ngữ về Lập trình hướng đối tượng: (i) tính chất trừu tượng – abstraction; (ii) tính chất đa hình – polymorphism; (iii) lớp trừu tượng – abstract class; (iv) giao diện – interface.

Không giống như những ngôn ngữ lập trình khác như Java / C# / PHP, quan điểm của Python là một sự linh động hết sức có thể. Chúng ta có thể tham khảo những đặc trưng của quan điểm Python như sau (https://www.python.org/dev/peps/pep-0020/):

  • Đẹp thì tốt hơn xấu.
  • Rõ ràng là tốt hơn so với ngầm.
  • Đơn giản là tốt hơn phức hợp.
  • Phức hợp tốt hơn phức tạp.
  • Bằng phẳng là tốt hơn so với lồng nhau.
  • Thưa thì tốt hơn dày đặc.
  • Tính dễ đọc.
  • Trường hợp đặc biệt không đủ đặc biệt để phá vỡ các quy tắc.
  • Mặc dù thực tế đánh bại sự tinh khiết.
  • Lỗi không bao giờ nên âm thầm vượt qua.
  • Trừ khi im lặng rõ ràng.
  • Trước sự mơ hồ, hãy từ chối sự cám dỗ để đoán.
  • Nên có một – và tốt nhất là chỉ có một cách rõ ràng để làm điều đó.
  • Mặc dù cách đó ban đầu có thể không rõ ràng trừ khi bạn là người Hà Lan.
  • Bây giờ tốt hơn không bao giờ.
  • Mặc dù không bao giờ thường tốt hơn * ngay * bây giờ.
  • Nếu việc thực hiện khó giải thích, đó là một ý tưởng tồi.
  • Nếu việc thực hiện khó giải thích, đó là một ý tưởng tồi.
  • Namespaces là một ý tưởng tuyệt vời – hãy làm nhiều hơn nữa!

Đối với tính chất đa hình cũng vậy, Python xem khái niệm abstract classinterface là như nhau và dưới một sự thể hiện duy nhất là abstract class.

Như vậy chúng ta muốn phân tích và thiết kế một chương trình hướng đối tượng càng thuần túy, thì chúng ta phải phân hoạch các class dựa vào tư duy Lập trình hướng đối tượng.

Chúng ta thiết kế một chương trình nhỏ bao gồm các lớp và giao diện như sau:

  • Lớp trừu tượng: PhuongTienGiaoThong.
  • Các lớp đối tượng ở tầng dưới thứ hai: PhuongTienDuongBo; PhuongTienDuongThuy; PhuongTienDuongKhong.
  • Các lớp đối tượng ở tầng dưới cùng: Oto; XeMay; XeDap; TauThuy; Thuyen; MayBay; KhinhKhiCau; ThuyPhiCo.
  • Giao diện ở cấp cao nhất: HoatDong.
  • Giao diện ở tầng dưới: CoTheChay; CoTheBay; CoTheBoi.

Thiết kế Lớp trừu tượng

Bước 1.

Chúng ta thực hiện tạo PyDev Project trong Eclipse IDE và đặt tên là PythonOOPThirdProject.

Chúng ta thực hiện tạo package mainfile Main.py.

Bước 2.

Chúng ta thực hiện tạo package object.

Chúng ta thực hiện tạo class PhuongTienGiaoThong.

Những điểm cần chú ý:

  • Cách thức để định nghĩa một lớp đối tượng trong Python là kế thừa từ lớp ABC (viết tắt của Abstract Base Class) trong module abc.

Bước 3.

Chúng ta thực hiện tạo class PhuongTienDuongBo là một dẫn xuất của class PhuongTienGiaoThong.

Bước 4.

Chúng ta thực hiện tạo class PhuongTienDuongThuy là một dẫn xuất của class PhuongTienGiaoThong.

Bước 5.

Chúng ta thực hiện tạo class PhuongTienDuongKhong là một dẫn xuất của class PhuongTienGiaoThong.

Thiết kế Lớp đối tượng

Bước 1.

Chúng ta thực hiện tạo class Oto là một dẫn xuất của class PhuongTienDuongBo.

Bước 2.

Chúng ta thực hiện tạo class XeMay là một dẫn xuất của class PhuongTienDuongBo.

Bước 3.

Chúng ta thực hiện tạo class XeDap là một dẫn xuất của class PhuongTienDuongBo.

Bước 4.

Chúng ta thực hiện tạo class Thuyen là một dẫn xuất của class PhuongTienDuongThuy.

Bước 5.

Chúng ta thực hiện tạo class TauThuy là một dẫn xuất của class PhuongTienDuongThuy.

Bước 6.

Chúng ta thực hiện tạo class MayBay là một dẫn xuất của class PhuongTienDuongKhong.

Bước 7.

Chúng ta thực hiện tạo class KhinhKhiCau là một dẫn xuất của class PhuongTienDuongKhong.

Bước 8.

Chúng ta thực hiện tạo class ThuyPhiCo là một dẫn xuất của class PhuongTienGiaoThong.

Thiết kế Giao diện

Bước 1.

Chúng ta thực hiện tạo package action.

Chúng ta thực hiện tạo abstract class CoTheChay đóng vai trò như một interface.

Bước 2.

Chúng ta thực hiện tạo abstract class CoTheBoi đóng vai trò như một interface.

Bước 3.

Chúng ta thực hiện tạo abstract class CoTheBay đóng vai trò như một interface.

Bước 4.

Chúng ta thực hiện tạo abstract class HoatDong đóng vai trò như một interface, là class cơ sở của các class: CoTheChay; CoTheBay; CoTheBoi.

Thiết kế Tính đa hình thứ nhất

Bước 1.

Chúng ta đặc tả những đặc trưng của abstract class PhuongTienGiaoThong:

  • Thuộc tính: soLuongBanhXe; soLuongChoNgoi.
  • Những phương thức get / set.
  • Phương thức trừu tượng: gioiThieu().

Chú ý rằng những đặc trưng này sẽ được kế thừa lại hoàn toàn từ những lớp dẫn xuất của PhuongTienGiaoThong trên cây gia phả.

Những điểm cần chú ý:

  • Chúng ta sử dụng decorator @abstractmethod trong module abc để định nghĩa một phương thức trừu tượng.

Bước 2.

Chúng ta đặc tả những đặc trưng của class PhuongTienDuongBo:

  • Thuộc tính. Đầu tiên là kế thừa những thuộc tính từ lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa thêm 01 thuộc tính riêng biệt: loaiDongCo.
  • Phương thức. Đầu tiên là kế thừa trọn vẹn những phương thức get / set đối với những thuộc tính được đặc tả ở lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa các phương thức get / set đối với thuộc tính loaiDongCo.
  • Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Chú ý rằng những đặc trưng này sẽ được kế thừa lại hoàn toàn từ những lớp dẫn xuất của PhuongTienDuongBo trên cây gia phả.

Bước 3.

Chúng ta đặc tả những đặc trưng của class PhuongTienDuongKhong:

  • Thuộc tính. Đầu tiên là kế thừa những thuộc tính từ lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa thêm 02 thuộc tính riêng biệt: soLuongCanh; soLuongQuat.
  • Phương thức. Đầu tiên là kế thừa trọn vẹn những phương thức get / set đối với những thuộc tính được đặc tả ở lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa các phương thức get / set đối với thuộc tính soLuongCanh; soLuongQuat.
  • Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Chú ý rằng những đặc trưng này sẽ được kế thừa lại hoàn toàn từ những lớp dẫn xuất của PhuongTienDuongKhong trên cây gia phả.

Bước 4.

Chúng ta đặc tả những đặc trưng của class PhuongTienDuongThuy:

  • Thuộc tính. Đầu tiên là kế thừa những thuộc tính từ lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa thêm 01 thuộc tính riêng biệt: loaiBanhLai.
  • Phương thức. Đầu tiên là kế thừa trọn vẹn những phương thức get / set đối với những thuộc tính được đặc tả ở lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa các phương thức get / set đối với thuộc tính loaiBanhLai.
  • Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Chú ý rằng những đặc trưng này sẽ được kế thừa lại hoàn toàn từ những lớp dẫn xuất của PhuongTienDuongThuy trên cây gia phả.

Bước 5.

Chúng ta đặc tả những đặc trưng của class Oto:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongBo.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 6.

Chúng ta đặc tả những đặc trưng của class XeMay:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongBo.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 7.

Chúng ta đặc tả những đặc trưng của class XeDap:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongBo.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 8.

Chúng ta đặc tả những đặc trưng của class MayBay:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongKhong.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 9.

Chúng ta đặc tả những đặc trưng của class KhinhKhiCau:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongKhong.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 10.

Chúng ta đặc tả những đặc trưng của class TauThuy:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongThuy.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 11.

Chúng ta đặc tả những đặc trưng của class Thuyen:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongThuy.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 12.

Chúng ta đặc tả những đặc trưng của class ThuyPhiCo:

  • Thuộc tính. Đầu tiên là kế thừa những thuộc tính từ lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa thêm 02 thuộc tính riêng biệt: loaiBanhLai; soLuongCanh.
  • Phương thức. Đầu tiên là kế thừa trọn vẹn những phương thức get / set đối với những thuộc tính được đặc tả ở lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa các phương thức get / set đối với thuộc tính loaiBanhLai; soLuongCanh.
  • Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 13.

Chúng ta thực hiện thử nghiệm tính đa hình như bên dưới.

Chúng ta có thể nhận thấy những điểm rất rõ ở đây là:

  • Thực thể của đối tượng nào thì sẽ tự biết mình là ai.
  • Và như vậy sẽ tự thực hiện một cách chính xác phương thức gioiThieu() cũng như các phương thức get / set của các thuộc tính được đặc tả trong lớp trừu tượng PhuongTienGiaoThong.

Bước 14.

Kết quả thực hiện thử nghiệm đa hình thứ nhất như sau:

Thiết kế Tính đa hình thứ hai

Bước 1.

Chúng ta định nghĩa phương thức trừu tượng thongBao() trong class cơ sở HoatDong.

Bước 2.

Chúng ta định nghĩa class CoTheChay kế thừa từ class HoatDong:

  • Kế thừa việc định nghĩa các phương thức trừu tượng từ class HoatDong.
  • Định nghĩa phương thức trừu tượng riêng biệt: chay().

Bước 3.

Chúng ta định nghĩa class CoTheBoi kế thừa từ class HoatDong:

  • Kế thừa việc định nghĩa các phương thức trừu tượng từ class HoatDong.
  • Định nghĩa phương thức trừu tượng riêng biệt: boi().

Bước 4.

Chúng ta định nghĩa class CoTheBay kế thừa từ class HoatDong:

  • Kế thừa việc định nghĩa các phương thức trừu tượng từ class HoatDong.
  • Định nghĩa phương thức trừu tượng riêng biệt: bay().

Bước 5.

Chúng ta điều chỉnh class PhuongTienDuongBo để thuộc phạm vi ảnh hưởng của class CoTheChay:

Bước 6.

Chúng ta điều chỉnh class PhuongTienDuongThuy để thuộc phạm vi ảnh hưởng của class CoTheBoi:

Bước 7.

Chúng ta điều chỉnh class PhuongTienDuongKhong để thuộc phạm vi ảnh hưởng của class CoTheBay:

Bước 8.

Chúng ta điều chỉnh class ThuyPhiCo để thuộc phạm vi ảnh hưởng của class CoTheChayCoTheBoi.

Bước 9.

Chúng ta điều chỉnh class Oto:

Bước 10.

Chúng ta điều chỉnh class XeMay:

Bước 11.

Chúng ta điều chỉnh class XeDap:

Bước 12.

Chúng ta điều chỉnh class MayBay:

Bước 13.

Chúng ta điều chỉnh class KhinhKhiCau:

Bước 14.

Chúng ta điều chỉnh class TauThuy:

Bước 15.

Chúng ta điều chỉnh class Thuyen:

Bước 16.

Chúng ta điều chỉnh lại ví dụ về tính đa hình như bên dưới.

Chúng ta cần kiểm tra một chút để biết thực thể của đối tượng nào bằng cách sử dụng từ khóa isinstance.

Tổng kết

Trong bài này, chúng ta đã cùng nhau tìm hiểu sự hỗ trợ của Python trong việc thực hiện tính chất đa hình trong Lập trình hướng đối tượng.

Hi vọng với bài này thì chúng ta đã có cái nhìn tổng quát hơn về cả 04 tính chất đặc trưng nhất của Lập trình hướng đối tượng.

Lập trình hướng đối tượng – Phần 3 – Tính chất đa hình (polymorphism), lớp trừu tượng (abstract class) và giao diện (interface) – PHP

Giới thiệu

Trong nội dung bài viết này, chúng ta cùng nhau tìm hiểu cách thức mà Java hỗ trợ việc thực hiện những thuật ngữ về Lập trình hướng đối tượng: (i) tính chất trừu tượng – abstraction; (ii) tính chất đa hình – polymorphism; (iii) lớp trừu tượng – abstract class; (iv) giao diện – interface.

Chúng ta thiết kế một chương trình nhỏ bao gồm các lớp và giao diện như sau:

  • Lớp trừu tượng: PhuongTienGiaoThong.
  • Các lớp đối tượng ở tầng dưới thứ hai: PhuongTienDuongBo; PhuongTienDuongThuy; PhuongTienDuongKhong.
  • Các lớp đối tượng ở tầng dưới cùng: Oto; XeMay; XeDap; TauThuy; Thuyen; MayBay; KhinhKhiCau; ThuyPhiCo.
  • Các lớp đối tượng ở tầng dưới cùng: Oto; XeMay; XeDap; TauThuy; Thuyen; MayBay; KhinhKhiCau; ThuyPhiCo.
  • Giao diện ở cấp cao nhất: HoatDong.
  • Giao diện ở tầng dưới: CoTheChay; CoTheBay; CoTheBoi.

Thiết kế Lớp trừu tượng

Bước 1.

Chúng ta thực hiện tạo PHP Project trong Eclipse IDE và đặt tên là PHPOOPThirdProject.

Chúng ta thực hiện tạo folder mainfile index.php.

Bước 2.

Chúng ta thực hiện tạo folder object.

Chúng ta thực hiện tạo class PhuongTienGiaoThong.

Những điểm cần chú ý:

  • Đây là một lớp trừu tượng, nên chúng ta sử dụng từ khóa abstract phía trước định nghĩa tên của class.

Bước 3.

Chúng ta thực hiện tạo class PhuongTienDuongBo là một dẫn xuất của class PhuongTienGiaoThong.

Bước 4.

Chúng ta thực hiện tạo class PhuongTienDuongThuy là một dẫn xuất của class PhuongTienGiaoThong.

Bước 5.

Chúng ta thực hiện tạo class PhuongTienDuongKhong là một dẫn xuất của class PhuongTienGiaoThong.

Thiết kế Lớp đối tượng

Bước 1.

Chúng ta thực hiện tạo class Oto là một dẫn xuất của class PhuongTienDuongBo.

Bước 2.

Chúng ta thực hiện tạo class XeMay là một dẫn xuất của class PhuongTienDuongBo.

Bước 3.

Chúng ta thực hiện tạo class XeDap là một dẫn xuất của class PhuongTienDuongBo.

Bước 4.

Chúng ta thực hiện tạo class Thuyen là một dẫn xuất của class PhuongTienDuongThuy.

Bước 5.

Chúng ta thực hiện tạo class TauThuy là một dẫn xuất của class PhuongTienDuongThuy.

Bước 6.

Chúng ta thực hiện tạo class MayBay là một dẫn xuất của class PhuongTienDuongKhong.

Bước 7.

Chúng ta thực hiện tạo class KhinhKhiCau là một dẫn xuất của class PhuongTienDuongKhong.

Bước 8.

Chúng ta thực hiện tạo class ThuyPhiCo là một dẫn xuất của class PhuongTienGiaoThong.

Thiết kế Giao diện

Bước 1.

Chúng ta thực hiện tạo folder action.

Chúng ta thực hiện tạo interface CoTheBoi.

Những điểm cần chú ý:

  • Chúng ta sử dụng từ khóa interface đứng trước định nghĩa tên của giao diện.

Bước 2.

Chúng ta thực hiện tạo interface CoTheBay.

Bước 3.

Chúng ta thực hiện tạo interface CoTheChay.

Bước 4.

Chúng ta thực hiện tạo interface HoatDong là giao diện cơ sở của các giao diện: CoTheChay; CoTheBay; CoTheBoi.

Thiết kế Tính đa hình thứ nhất

Bước 1.

Chúng ta đặc tả những đặc trưng của abstract class PhuongTienGiaoThong:

  • Thuộc tính: soLuongBanhXe; soLuongChoNgoi.
  • Những phương thức get / set.
  • Phương thức trừu tượng: gioiThieu().

Chú ý rằng những đặc trưng này sẽ được kế thừa lại hoàn toàn từ những lớp dẫn xuất của PhuongTienGiaoThong trên cây gia phả.

Bước 2.

Chúng ta đặc tả những đặc trưng của class PhuongTienDuongBo:

  • Thuộc tính. Đầu tiên là kế thừa những thuộc tính từ lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa thêm 01 thuộc tính riêng biệt: loaiDongCo.
  • Phương thức. Đầu tiên là kế thừa trọn vẹn những phương thức get / set đối với những thuộc tính được đặc tả ở lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa các phương thức get / set đối với thuộc tính loaiDongCo.
  • Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Chú ý rằng những đặc trưng này sẽ được kế thừa lại hoàn toàn từ những lớp dẫn xuất của PhuongTienDuongBo trên cây gia phả.

Bước 3.

Chúng ta đặc tả những đặc trưng của class PhuongTienDuongKhong:

  • Thuộc tính. Đầu tiên là kế thừa những thuộc tính từ lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa thêm 02 thuộc tính riêng biệt: soLuongCanh; soLuongQuat.
  • Phương thức. Đầu tiên là kế thừa trọn vẹn những phương thức get / set đối với những thuộc tính được đặc tả ở lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa các phương thức get / set đối với thuộc tính soLuongCanh; soLuongQuat.
  • Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Chú ý rằng những đặc trưng này sẽ được kế thừa lại hoàn toàn từ những lớp dẫn xuất của PhuongTienDuongKhong trên cây gia phả.

Bước 4.

Chúng ta đặc tả những đặc trưng của class PhuongTienDuongThuy:

  • Thuộc tính. Đầu tiên là kế thừa những thuộc tính từ lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa thêm 0 thuộc tính riêng biệt: loaiBanhLai.
  • Phương thức. Đầu tiên là kế thừa trọn vẹn những phương thức get / set đối với những thuộc tính được đặc tả ở lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa các phương thức get / set đối với thuộc tính loaiBanhLai.
  • Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Chú ý rằng những đặc trưng này sẽ được kế thừa lại hoàn toàn từ những lớp dẫn xuất của PhuongTienDuongThuy trên cây gia phả.

Bước 5.

Chúng ta đặc tả những đặc trưng của class Oto:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongBo.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 6.

Chúng ta đặc tả những đặc trưng của class XeMay:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongBo.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 7.

Chúng ta đặc tả những đặc trưng của class XeDap:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongBo.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 8.

Chúng ta đặc tả những đặc trưng của class MayBay:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongKhong.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 9.

Chúng ta đặc tả những đặc trưng của class KhinhKhiCau:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongKhong.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 10.

Chúng ta đặc tả những đặc trưng của class TauThuy:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongThuy.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 11.

Chúng ta đặc tả những đặc trưng của class Thuyen:

  • Thuộc tính. Kế thừa trọn vẹn những thuộc tính từ lớp cơ sở PhuongTienDuongThuy.
  • Phương thức. Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 12.

Chúng ta đặc tả những đặc trưng của class ThuyPhiCo:

  • Thuộc tính. Đầu tiên là kế thừa những thuộc tính từ lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa thêm 02 thuộc tính riêng biệt: loaiBanhLai; soLuongCanh.
  • Phương thức. Đầu tiên là kế thừa trọn vẹn những phương thức get / set đối với những thuộc tính được đặc tả ở lớp cơ sở PhuongTienGiaoThong. Tiếp đến là định nghĩa các phương thức get / set đối với thuộc tính loaiBanhLai; soLuongCanh.
  • Kế thừa và đặc tả lại phương thức gioiThieu(). Đây là một phương thức được sử dụng trong ví dụ về tính chất đa hình.

Bước 13.

Chúng ta thực hiện thử nghiệm tính đa hình như bên dưới.

Chúng ta có thể nhận thấy những điểm rất rõ ở đây là:

  • Thực thể của đối tượng nào thì sẽ tự biết mình là ai.
  • Và như vậy sẽ tự thực hiện một cách chính xác phương thức gioiThieu() cũng như các phương thức get / set của các thuộc tính được đặc tả trong lớp trừu tượng PhuongTienGiaoThong.

Bước 14.

Kết quả thực hiện thử nghiệm đa hình thứ nhất như sau:

Thiết kế Tính đa hình thứ hai

Bước 1.

Chúng ta định nghĩa phương thức trừu tượng thongBao() trong interface cơ sở HoatDong.

Bước 2.

Chúng ta định nghĩa interface CoTheChay kế thừa từ interface HoatDong:

  • Kế thừa việc định nghĩa các phương thức trừu tượng từ interface HoatDong.
  • Định nghĩa phương thức trừu tượng riêng biệt: chay().

Bước 3.

Chúng ta định nghĩa interface CoTheBoi kế thừa từ interface HoatDong:

  • Kế thừa việc định nghĩa các phương thức trừu tượng từ interface HoatDong.
  • Định nghĩa phương thức trừu tượng riêng biệt: boi().

Bước 4.

Chúng ta định nghĩa interface CoTheBay kế thừa từ interface HoatDong:

  • Kế thừa việc định nghĩa các phương thức trừu tượng từ interface HoatDong.
  • Định nghĩa phương thức trừu tượng riêng biệt: bay().

Bước 5.

Chúng ta điều chỉnh class PhuongTienDuongBo để thuộc phạm vi ảnh hưởng của interface CoTheChay:

  • Chúng ta sử dụng từ khóa implements, có nghĩa là thực thi một interface nào đó.
  • Kế thừa và đặc tả lại toàn bộ các phương thức trừu tượng được định nghĩa trong interface HoatDong cũng như CoTheChay.

Bước 6.

Chúng ta điều chỉnh class PhuongTienDuongThuy để thuộc phạm vi ảnh hưởng của interface CoTheBoi:

  • Chúng ta sử dụng từ khóa implements, có nghĩa là thực thi một interface nào đó.
  • Kế thừa và đặc tả lại toàn bộ các phương thức trừu tượng được định nghĩa trong interface HoatDong cũng như CoTheBoi.

Bước 7.

Chúng ta điều chỉnh class PhuongTienDuongKhong để thuộc phạm vi ảnh hưởng của interface CoTheBay:

  • Chúng ta sử dụng từ khóa implements, có nghĩa là thực thi một interface nào đó.
  • Kế thừa và đặc tả lại toàn bộ các phương thức trừu tượng được định nghĩa trong interface HoatDong cũng như CoTheBay.

Bước 8.

Chúng ta điều chỉnh class ThuyPhiCo để thuộc phạm vi ảnh hưởng của interface CoTheChayCoTheBoi.

  • Chúng ta sử dụng từ khóa implements, có nghĩa là thực thi một interface nào đó.
  • Có thể thực thi cùng lúc nhiều interface. Có nghĩa rằng 1 lớp đối tượng có thể cùng lúc chịu ảnh hưởng của nhiều bộ quy tắc khác nhau.
  • Kế thừa và đặc tả lại toàn bộ các phương thức trừu tượng được định nghĩa trong interface HoatDong cũng như CoTheChay, CoTheBoi.

Bước 9.

Chúng ta điều chỉnh class Oto:

Bước 10.

Chúng ta điều chỉnh class XeMay:

Bước 11.

Chúng ta điều chỉnh class XeDap:

Bước 12.

Chúng ta điều chỉnh class MayBay:

Bước 13.

Chúng ta điều chỉnh class KhinhKhiCau:

Bước 14.

Chúng ta điều chỉnh class TauThuy:

Bước 15.

Chúng ta điều chỉnh class Thuyen:

Bước 16.

Chúng ta điều chỉnh lại ví dụ về tính đa hình như bên dưới.

Những điểm cần chú ý:

  • Những đối tượng thuộc phạm vi ảnh hưởng của những interface khác nhau sẽ thực thi những phương thức đặc trưng riêng của từng interface.
  • Chúng ta cần kiểm tra một chút để biết thực thể của đối tượng nào bằng cách sử dụng từ khóa instanceof.

Bước 17.

Chúng ta chú ý thực hiện phương thức require_once theo:

  • Thứ tự sử dụng các classinterface.
  • Chú ý đặc điểm của PHP là sẽ sao chép toàn bộ mã nguồn của file php vào đúng vị trí thực hiện require_once nên chúng ta phải xem xét từng classinterface.
  • Trong từng classinterface, nếu có sử dụng đến class hay interface nào khác, nhằm mục đích kế thừa hoặc thực thi, thì phải thực hiện require_once đến class hay interface này trước.
  • Như vậy chúng ta lần lượt thực hiện require_once từ classinterface cơ sở, rồi xuống dần trên cây gia phả.

Tổng kết

Trong bài này, chúng ta đã cùng nhau tìm hiểu sự hỗ trợ của PHP trong việc thực hiện tính chất đa hình trong Lập trình hướng đối tượng.

Hi vọng với bài này thì chúng ta đã có cái nhìn tổng quát hơn về cả 04 tính chất đặc trưng nhất của Lập trình hướng đối tượng.