Lớp hình tròn
Thuộc phần Lập trình hướng đối tượng trong hành trình Lua của Coddy. Bài học 57 trên 70.
Thử thách
DễHãy tiếp tục xây dựng trình quản lý hình dạng Shape Manager bằng cách thêm lớp Circle bên cạnh lớp Rectangle mà bạn đã tạo trong bài học trước.
Bạn sẽ làm việc với bốn tệp để sắp xếp các hình dạng:
Shape.lua: Lớp Shape cơ sở, có:new(name)và:getName().Rectangle.lua: Lớp Rectangle từ thử thách trước, có:getArea().Circle.lua: Tạo lớp Circle kế thừa từ Shape. Hàm khởi tạo cần nhậnradius, gọi hàm khởi tạo của lớp cha với tên"Circle"và lưu bán kính. Thêm phương thức:getArea()để tính diện tích hình tròn bằng công thức πr². Dùngmath.pilàm giá trị của π.main.lua: Nạp cả hai module Rectangle và Circle. Đọc ba giá trị từ đầu vào: chiều rộng hình chữ nhật, chiều cao hình chữ nhật và bán kính hình tròn. Tạo một đối tượng cho mỗi hình dạng và in ra bốn dòng: tên hình chữ nhật, diện tích hình chữ nhật, tên hình tròn và diện tích hình tròn.
Giờ đây, cả hai hình dạng đều có cùng giao diện thông qua kế thừa: mỗi hình có phương thức :getName() từ Shape và cách triển khai riêng cho :getArea(). Giao diện chung này sẽ hữu ích trong các bài học sắp tới.
Đầu vào: Ba dòng: chiều rộng (số), chiều cao (số) và bán kính (số).
Đầu ra: Bốn dòng: tên hình chữ nhật, diện tích hình chữ nhật, tên hình tròn và diện tích hình tròn.
Tự làm thử
-- Nạp module Rectangle
local Rectangle = require('Rectangle')
-- Nạp module Circle
-- TODO: Nạp module Circle tại đây
-- Đọc chiều rộng và chiều cao từ đầu vào
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: Đọc bán kính từ đầu vào
-- Tạo instance Rectangle mới với kích thước đã cho
local rect = Rectangle:new(width, height)
-- TODO: Tạo instance Circle mới với bán kính đã cho
-- In ra tên và diện tích của hình chữ nhật
print(rect:getName())
print(rect:getArea())
-- TODO: In ra tên và diện tích của hình tròn
Tất cả bài học trong Lập trình hướng đối tượng
1Khái niệm “self”
Bảng với hàm“self” tường minhCú pháp dấu hai chấmDấu chấm và dấu hai chấmÔn tập: Điểm chuyển động4Dự án: Ngân hàng số
Thiết lập dự ánPhương thức nạp tiền7Đa hình và ghi đè
Ghi đè phương thứcGọi phương thức của lớp chaGõ kiểu vịtGiao diện chungKiểm tra kiểuÔn tập: Vai trò của nhân viên10Dự án: Quản lý hình dạng
Thiết lập dự ánLớp hình chữ nhậtLớp hình trònPhương thức tính chu viTập hợp hình dạngTổng diện tíchLọc hình dạng2Mẫu Prototype cho lớp
Khái niệm PrototypeLiên kết bằng __indexHàm khởi tạo :new()Khởi tạo thuộc tínhCác instance độc lậpÔn tập: Nhà máy ô tô5Nạp chồng toán tử trong OOP
Cộng các đối tượngTrừ các đối tượngNối các đối tượngSo sánh các đối tượng (<, >)Ôn tập: phép tính với ví tiền8Đóng gói
Quy ước đặt tênClosure để bảo mậtTruy cập qua closureBảng chỉ đọcLogic kiểm tra hợp lệTổng kết: Két an toàn11Mẫu thiết kế (cơ bản)
Hàm tạo đối tượngBảng SingletonMẫu IteratorObserver (Listener)Ôn tập: Factory Logger3Trạng thái và hành vi của đối tượng
Biến instancePhương thức getterPhương thức setterThuộc tính tính toánĐịnh dạng chuỗiKiểm tra tính bằng nhauÔn tập: điểm số học sinh6Cơ bản về kế thừa
Thiết lập kế thừaKế thừa phương thứcMở rộng hàm khởi tạoThêm phương thức cho lớp conDùng chung và riêngÔn tập: hệ phân cấp hình dạngTự luyện tập: Trình biên dịch Lua online