Thẻ
#oop

Bài tổng hợp 20 ngày OOP: phân tích đề bài, tổ chức package model/repository/service/app, áp dụng đủ 4 trụ cột — và kiến trúc phân tầng sẽ gặp lại trong Spring.

Công thức lớp bất biến, vì sao final chưa đủ và defensive copy hai chiều, List.copyOf vs unmodifiableList — và món quà thread-safe không cần lock.

Ngày 20 của 99 Ngày Java: record — lớp dữ liệu trong một dòng khai báo với equals/hashCode/toString tự sinh, compact constructor cho validation, so sánh với Lombok và JavaBean, value semantics cùng record pattern của Java 21 — và ranh giới sử dụng: DTO dùng record, entity dùng class.

Ngày 19 của 99 Ngày Java: bốn dạng nested class — member inner (tham chiếu ngầm tới đối tượng ngoài), static nested (lựa chọn mặc định), local class trong method, anonymous class dùng một lần — cùng quy tắc capture effectively final và bảng quyết định chọn dạng phù hợp.

Ngày 18 của 99 Ngày Java: static — thành viên thuộc về lớp thay vì đối tượng, static block và static import, ba cấp độ của final (biến, method, lớp), mẫu hằng số public static final, và ranh giới quan trọng: static bất biến thì an toàn, static có thể ghi là trạng thái toàn cục nguy hiểm.

Ngày 17 của 99 Ngày Java: interface — hợp đồng thuần túy tách khỏi cây kế thừa, implement nhiều interface cùng lúc, default & static method cho phép API tiến hóa không phá vỡ mã cũ, và functional interface — cửa ngõ sang lambda và lập trình hàm.

Ngày 16 của 99 Ngày Java: abstract class và abstract method — chuyển quy ước override thành ràng buộc biên dịch, khi nào nên dùng, mẫu template method (lớp cha kiểm soát trình tự, lớp con cung cấp chi tiết), và bảng so sánh với interface trước khi tìm hiểu nó ở Ngày 17.

Ngày 15 của 99 Ngày Java: upcasting và dynamic dispatch — kiểu biến vs kiểu đối tượng thật, một vòng lặp tính lương cho mọi loại nhân viên, downcasting với instanceof & pattern matching, lập trình theo hợp đồng (nền móng của DI), và toString — đa hình bạn dùng mỗi ngày.
