Lập trình hướng đối tượng với Java: Lớp, kế thừa và đa hình
Khoá học tiếp nối Java Cơ bản, đưa bạn từ lập trình thủ tục sang tư duy hướng đối tượng. Bạn sẽ tự định nghĩa lớp và tạo đối tượng, đóng gói dữ liệu, tổ chức quan hệ giữa các lớp, tái sử dụng code bằng kế thừa, viết code linh hoạt nhờ đa hình, xử lý ngoại lệ, đọc ghi tệp văn bản, và thiết kế với lớp trừu tượng cùng interface.
Mỗi bài học gồm các bài đọc ngắn có ví dụ chạy được ngay trên trình duyệt, bài đọc hiểu code và bài thực hành chấm tự động, mỗi hoạt động chỉ nhắm một mục tiêu.
Khoá gồm 5 chương, một mini project giữa khoá và một dự án cuối khoá.
Nội dung khóa học
Module 1. Lớp và đối tượng
11 bài học · 71 hoạt động-
Đối tượng: trạng thái và hành vi
-
Lớp: khuôn mẫu của đối tượng
-
Sơ đồ lớp UML
-
Lớp Circle hoàn chỉnh
-
Lớp chính và chương trình nhiều lớp
-
Đọc code: các đối tượng độc lập
-
Thực hành: Lớp Rectangle
-
Lớp TV: đối tượng có nhiều hành vi
-
Đọc code: điều khiển TV
-
Thực hành: Lớp Stock
-
Constructor là gì?
-
Nạp chồng constructor
-
Constructor mặc định
-
Đọc code: constructor nào được gọi?
-
Tìm lỗi: constructor không chạy
-
Thực hành: Lớp MyPoint
-
Biến tham chiếu và kiểu tham chiếu
-
Toán tử chấm và đối tượng vô danh
-
Giá trị mặc định của trường dữ liệu
-
Đọc code: giá trị mặc định
-
null và NullPointerException
-
Biến nguyên thuỷ và biến tham chiếu
-
Đọc code: hai biến, một đối tượng
-
Tìm lỗi: ShowErrors
-
Thực hành: Sửa lỗi NullPointerException
-
Lớp Date
-
Lớp Random
-
Đọc code: Date và getTime
-
Thực hành: Số ngẫu nhiên với seed 1000
-
Thực hành: Các mốc thời gian với Date
-
Biến static: dữ liệu dùng chung
-
Phương thức static và hằng
-
Đọc code: static và thể hiện
-
Static và thể hiện: ai gọi được ai?
-
Nên chọn thể hiện hay static?
-
Tìm lỗi: static gọi thành viên thể hiện
-
Thực hành: Đánh số vé tự động
-
Thực hành: Lớp tiện ích TimeTool
-
Package và quyền truy cập mặc định
-
public và private
-
Vì sao phải đóng gói trường dữ liệu?
-
Getter và setter
-
Đọc code: setter có kiểm tra
-
Thực hành: Lớp Account
-
Thực hành: Lớp Fan
-
Thực hành: Lớp StopWatch
-
Truyền đối tượng cho phương thức
-
Truyền giá trị và truyền tham chiếu
-
Đọc code: đếm bằng đối tượng Count
-
Đọc code: hai cách hoán đổi
-
Đọc code: gán lại tham số
-
Phương thức trả về đối tượng
-
Thực hành: Lớp Location
-
Mảng đối tượng
-
Đọc code: phần tử null trong mảng
-
Xử lý mảng đối tượng
-
Thực hành: Hình chữ nhật lớn nhất
-
Thực hành: Sinh viên đạt điểm trung bình trở lên
-
Đối tượng và lớp bất biến
-
Khi getter làm lộ dữ liệu
-
Đọc code: mảng private bị sửa từ bên ngoài
-
Thực hành: Lớp QuadraticEquation
-
Thực hành: Lớp LinearEquation
-
Phạm vi của biến trong lớp
-
Đọc code: biến nào đang được dùng?
-
Từ khoá this
-
Dùng this để gọi constructor khác
-
Tìm lỗi: this dùng sai chỗ
-
Thực hành: Lớp RegularPolygon
-
Sơ đồ tư duy: Lớp và đối tượng
-
Tổng kết Module 1
Module 2. Tư duy hướng đối tượng
10 bài học · 69 hoạt động-
Trừu tượng hoá lớp và hợp đồng của lớp
-
Ví dụ: lớp Loan
-
Bên trong lớp Loan
-
Thực hành: Dùng lớp Loan qua hợp đồng
-
Thực hành: Lớp MyPoint
-
Từ phương thức static đến đối tượng
-
Dùng lớp BMI
-
Cài đặt lớp BMI và hai cách tư duy
-
Thực hành: Thêm constructor cho lớp BMI
-
Thực hành: Lớp MyInteger
-
Thực hành: Lớp Time
-
Quan hệ kết hợp (association)
-
Tụ hợp và hợp thành (has-a)
-
Tụ hợp giữa các đối tượng cùng lớp
-
Đọc code: Hai xe chung một động cơ
-
Thực hành: Chuỗi quản lý của Person
-
Thực hành: Lớp Triangle2D
-
Thiết kế và dùng lớp Course
-
Bên trong lớp Course
-
Thực hành: Xoá học viên khỏi khoá học
-
Thực hành: Khoá học không giới hạn sĩ số
-
Tìm lỗi: Lớp Course bị lỗi
-
Ngăn xếp và lớp StackOfIntegers
-
Bên trong lớp StackOfIntegers
-
Đọc code: Lần vết push, pop, peek
-
Thực hành: Thừa số nguyên tố theo thứ tự giảm dần
-
Thực hành: Số nguyên tố nhỏ hơn 120 giảm dần
-
Thực hành: Lớp Queue
-
Lớp bao cho kiểu nguyên thuỷ
-
Chuyển đổi và so sánh với lớp bao
-
Đọc code: parseInt với cơ số
-
Thực hành: Đổi số từ cơ số bất kỳ sang hệ 10
-
Tự động đóng hộp và mở hộp
-
Đọc code: Đóng hộp, mở hộp và compareTo
-
Thực hành: Tìm số lớn nhất trong mảng Double
-
BigInteger: số nguyên lớn tuỳ ý
-
Đọc code: BigInteger là bất biến
-
Bài toán: Tính giai thừa lớn
-
Thực hành: Tính n! với BigInteger
-
Thực hành: Số lớn chia hết cho 5 hoặc 6
-
Thực hành: Số chính phương lớn hơn Long.MAX_VALUE
-
BigDecimal: số thập phân chính xác
-
Thực hành: Xấp xỉ số e bằng BigDecimal
-
Tạo chuỗi và tính bất biến của String
-
Chuỗi interned và phép so sánh ==
-
Đọc code: == và equals với chuỗi
-
Thay thế và tách chuỗi
-
Đọc code: replace trả về chuỗi mới
-
Thực hành: Tách chuỗi và tính tổng
-
Thực hành: Thay từ trong câu
-
Tìm lỗi: Lớp Message xử lý chuỗi sai
-
Khớp mẫu với matches và biểu thức chính quy
-
Thực hành: Kiểm tra số điện thoại
-
Thay thế và tách chuỗi theo mẫu
-
Đọc code: replaceAll và split với mẫu
-
Thực hành: Tách câu thành các từ
-
Chuyển đổi giữa chuỗi, mảng ký tự và số
-
Thực hành: Sắp xếp các ký tự của chuỗi
-
Định dạng chuỗi với String.format
-
Thực hành: Máy tính biểu thức
-
StringBuilder: chuỗi thay đổi được
-
Sửa nội dung trong StringBuilder
-
Đọc code: Truyền String và StringBuilder vào phương thức
-
Độ dài, sức chứa và chuyển về String
-
Thực hành: Chèn dấu phẩy phân nhóm hàng nghìn
-
Thực hành: Đảo ngược chuỗi bằng StringBuilder
-
Bài toán: Kiểm tra palindrome bỏ qua ký tự không phải chữ và số
-
Thực hành: Palindrome không phân biệt hoa thường
-
Tổng kết Module 2
Module 3. Kế thừa và đa hình
12 bài học · 77 hoạt động-
Vì sao cần kế thừa?
-
Lớp GeometricObject và từ khoá extends
-
Lớp con Rectangle và chương trình thử
-
Những lưu ý khi dùng kế thừa
-
Đọc code: phương thức thừa kế
-
Thực hành: Lớp Square kế thừa GeometricObject
-
Thực hành: Lớp Triangle
-
Gọi constructor lớp cha bằng super
-
Chuỗi constructor
-
Đọc code: thứ tự chạy constructor
-
Khi lớp cha không có constructor không tham số
-
Tìm lỗi: lớp con không biên dịch được
-
Gọi phương thức lớp cha bằng super
-
Thực hành: Constructor lớp con với super
-
Thực hành: Ba tầng constructor
-
Ghi đè phương thức
-
Phương thức nào ghi đè được?
-
Thực hành: Lớp Cylinder ghi đè getArea
-
Ghi đè và nạp chồng
-
Đọc code: ghi đè hay nạp chồng?
-
Chú thích @Override
-
Tìm lỗi: lớp con của Circle
-
Kiểm tra: Ghi đè và nạp chồng
-
Lớp Object: tổ tiên của mọi lớp
-
Phương thức toString
-
Đọc code: in đối tượng bằng println
-
Thực hành: Viết toString cho lớp Book
-
Kiểu con và kiểu cha
-
Đa hình qua tham số phương thức
-
Đọc code: một phương thức, nhiều kiểu đối tượng
-
Thực hành: Đếm hình đã tô màu
-
Kiểu khai báo và kiểu thực tế
-
Liên kết động
-
Đọc code: phương thức nào được gọi?
-
Khớp lúc biên dịch, liên kết lúc chạy
-
Đọc code: gọi phương thức ghi đè trong constructor
-
Thực hành: Tổng diện tích các hình
-
Kiểm tra: Đa hình và liên kết động
-
Ép kiểu ngầm định và tường minh
-
Toán tử instanceof
-
Ví dụ: hiển thị hình theo kiểu thực tế
-
Đọc code: instanceof trên cây kế thừa
-
Kiểm tra: Ép kiểu và instanceof
-
Thực hành: Mô tả con vật theo kiểu thực tế
-
equals mặc định và toán tử ==
-
Ghi đè equals
-
Đọc code: equals sai chữ ký
-
Thực hành: Ghi đè equals cho lớp Rectangle
-
Tạo ArrayList và thêm phần tử
-
Tìm, chèn, sửa và xoá phần tử
-
ArrayList và mảng
-
Đọc code: remove(1) xoá gì?
-
Thực hành: Các số phân biệt
-
Thực hành: Phần tử lớn nhất trong ArrayList
-
Thực hành: Xoá phần tử trùng lặp
-
Tìm lỗi: xoá hết một giá trị khỏi danh sách
-
Chuyển đổi giữa mảng và ArrayList
-
Sắp xếp, tìm max, min và xáo trộn
-
Thực hành: Sắp xếp danh sách điểm
-
Thực hành: Gộp hai danh sách
-
Bài toán: lớp MyStack
-
Hợp thành hay kế thừa?
-
Đọc code: push, pop, peek
-
Thực hành: In ngược bằng MyStack
-
Thực hành: Lớp Course dùng ArrayList
-
Từ khoá protected
-
Bốn mức truy cập
-
Chọn mức truy cập và quy tắc khi ghi đè
-
Từ khoá final với lớp và phương thức
-
Thực hành: Lớp Manager với trường protected
-
Kiểm tra: Mức truy cập và final
-
Tổng kết Module 3
-
Sơ đồ tư duy: Kế thừa và đa hình
-
Thực hành: Person, Student và Employee
-
Thực hành: Tài khoản thanh toán và tiết kiệm
-
Mini project: Quản lý nhân viên
-
Tổng kết Module 3
Module 4. Xử lý ngoại lệ và đọc ghi tệp văn bản
10 bài học · 58 hoạt động-
Khi chương trình gặp lỗi lúc chạy
-
Bắt ngoại lệ với try-catch
-
Ném ngoại lệ từ phương thức
-
Đọc code: ném và bắt ngoại lệ trong vòng lặp
-
Lợi ích của xử lý ngoại lệ
-
Thực hành: Phép chia an toàn
-
Nhập lại khi sai kiểu: InputMismatchException
-
Thực hành: Tổng hai số nguyên, bỏ qua dữ liệu sai
-
Cây lớp ngoại lệ: Throwable, Error và Exception
-
RuntimeException và các ngoại lệ thường gặp
-
Đọc code: giá trị null trong mảng
-
Thực hành: Truy cập mảng an toàn
-
Thực hành: Máy tính bắt lỗi toán hạng
-
Ngoại lệ checked và unchecked
-
Khai báo và ném ngoại lệ: throws và throw
-
Nhiều khối catch và thứ tự của chúng
-
Đọc code: khối catch nào được chọn?
-
Ngoại lệ lan truyền qua chuỗi lời gọi
-
Đọc code: ngoại lệ bị bắt ở đâu?
-
Lấy thông tin từ đối tượng ngoại lệ
-
Ví dụ: lớp Circle từ chối bán kính âm
-
Thực hành: Lớp Loan từ chối dữ liệu không hợp lệ
-
Thực hành: Chuyển chuỗi nhị phân thành số
-
Tìm lỗi: kiểm tra điểm số
-
Khối finally
-
Đọc code: try, catch, finally
-
Thực hành: Luôn in dòng kết thúc với finally
-
Khi nào nên dùng ngoại lệ?
-
Thực hành: Kiểm tra chuỗi số nguyên không dùng ngoại lệ
-
Ném lại ngoại lệ
-
Đọc code: ném lại và finally
-
Ngoại lệ xâu chuỗi
-
Thực hành: Bọc ngoại lệ gốc vào ngoại lệ mới
-
Định nghĩa lớp ngoại lệ riêng
-
Dùng ngoại lệ tự định nghĩa trong lớp Circle
-
Đọc code: ngoại lệ tự định nghĩa đi qua hai tầng
-
Thực hành: IllegalTriangleException
-
Thực hành: HexFormatException
-
Tệp và đường dẫn
-
Lớp File: xem thuộc tính của tệp
-
Tạo thư mục, đổi tên và xoá
-
Thực hành: Tạo thư mục
-
Ghi dữ liệu với PrintWriter
-
Đóng tệp tự động với try-with-resources
-
Đọc code: ghi đè tệp đã có
-
Thực hành: Ghi bảng bình phương vào tệp
-
Đọc dữ liệu từ tệp bằng Scanner
-
Thực hành: Tổng và trung bình điểm trong tệp
-
Scanner tách token như thế nào?
-
Đọc code: next và nextLine
-
Bài toán: thay thế văn bản trong tệp
-
Thực hành: Đếm ký tự, từ và dòng trong tệp
-
Thực hành: Xoá một chuỗi khỏi tệp
-
Đọc dữ liệu từ web với lớp URL
-
Bài toán: trình thu thập web
-
Tách các URL từ một dòng HTML
-
Thực hành: Liệt kê các URL trong trang HTML
-
Tổng kết Module 4
Module 5. Lớp trừu tượng và interface
11 bài học · 56 hoạt động-
Vì sao cần lớp trừu tượng?
-
Khai báo lớp và phương thức trừu tượng
-
Những điểm cần nhớ về lớp trừu tượng
-
Đọc code: phương thức thường gọi phương thức trừu tượng
-
Thực hành: Lớp Triangle kế thừa GeometricObject
-
Thực hành: Tổng diện tích các hình
-
Lớp Number: lớp cha của các lớp số
-
Tìm số lớn nhất trong danh sách Number
-
Đọc code: cộng các số kiểu Number
-
Thực hành: Sắp xếp danh sách Number
-
Lớp Calendar và GregorianCalendar
-
Thay đổi lịch: set, add và getActualMaximum
-
Đọc code: cộng ngày qua năm mới
-
Thực hành: Ngày đó là thứ mấy?
-
Thực hành: In lịch tháng
-
Interface là gì?
-
Vừa kế thừa lớp, vừa cài đặt interface
-
Hằng số và phương thức trong interface
-
Đọc code: lọc đối tượng theo interface
-
Thực hành: Interface Colorable
-
Thực hành: Interface Payable
-
Interface Comparable và phương thức compareTo
-
Sắp xếp mảng đối tượng với Arrays.sort
-
Tự cài đặt Comparable: ComparableRectangle
-
Đọc code: sắp xếp sách theo số trang
-
Tìm lỗi: sắp xếp mảng Person
-
Thực hành: Lớp ComparableCircle
-
Thực hành: Xếp hạng sinh viên theo điểm
-
Interface Cloneable và phương thức clone
-
Cho lớp của bạn clone được: lớp House
-
Sao chép nông và sao chép sâu
-
Đọc code: clone một ArrayList
-
Thực hành: Sao chép sâu lớp Course
-
So sánh interface và lớp trừu tượng
-
Chọn interface hay lớp trừu tượng?
-
Đọc code: một lớp, nhiều interface
-
Thực hành: Lớp Octagon
-
Thiết kế lớp Rational
-
Bên trong lớp Rational
-
Lớp bất biến, đóng gói và tràn số
-
Thực hành: Máy tính phân số
-
Thực hành: Tổng dãy phân số
-
Kiểu liệt kê là gì?
-
Dùng enum với if, switch và vòng lặp
-
Enum có trường dữ liệu và phương thức
-
Đọc code: ordinal và compareTo của enum
-
Thực hành: Ngày thường hay cuối tuần?
-
Thực hành: Enum cỡ ly trà sữa
-
Gắn kết và nhất quán
-
Đóng gói, rõ ràng và đầy đủ
-
Instance hay static? Kế thừa hay kết hợp?
-
Tìm lỗi: thiết kế lớp Student
-
Tổng kết Module 5
-
Sơ đồ tư duy: Lập trình hướng đối tượng với Java
-
Dự án cuối khoá: Quản lý thư viện trên console
-
Bài kiểm tra cuối khoá
Giảng viên
Nguyen Nhat