BT về thiết kế lớp cha và lớp con trong OOP
Mọi ng thảo luận xem thế nào: Cửa hàng MediaOne bán các sản phẩm đĩa nhạc, đĩa phim và các loại sách. Mỗi loại sản phẩm có một thông tin khác nhau. Ví dụ một đĩa nhạc có các thông tin ca sỹ, thể loại nhạc…; đĩa phim có thông tin Đạo diễn, Diễn viên…; Sách có các thông tin Nhà xuất bản, Tác giả… Bên cạnh việc quản lý các sản phẩm theo từng thuộc tính riêng, người quản lý còn có khả năng quản lý sản phẩm theo số lượng cũng như giá mua và giá bán của các mặt hàng, quản lý các chi phí khác như trả lương cho các nhân viên và các chi phí định kỳ của cửa hàng.
Khi xây dựng hệ thống MediaOne, một sinh viên thiết kế như sau: Xây dựng lớp Mặt hàng với các thuộc tính: Mã mặt hàng, Tên mặt hàng, Giá mua, Giá bán. Thiết kế lớp như vậy có nhược điểm là gì? Chỉ ra cách thiết kế để khắc phục nhược điểm này.
thế kế có nhược điểm rõ luôn… bây giờ bạn muốn check xem đĩa hát đó của diễn viên, nghệ sĩ hay đạo diễn nào thì bạn tính sao… các class mà bạn muốn thiết kế chúng có relationship, nhưng trong thiết kế mặt hàng chẳng có relationship với các class khác… bạn không thể truy vấn đến các đối tượng thuộc lớp khác dựa trên object của lớp mặt hàng của bạn…
Cách khắc phục thêm thuộc tính khoá của các lớp mà bạn muốn truy vấn vào trong lớp mặt hàng…
ví dụ như khoá id của lớp nghệ si, hay genre(thể loại nhạc) hay Song(Music) hay Video(Video) vào trong lớp mặt hàng… bạn có thể khắc phục được lỗi trên… tuy nhiên recommend không đặt quá nhiều khoá vào trong lớp mặt hàng… vì ảnh hưởng tốc độ truy cập… bạn có thể sử dụng bảng thứ ba(tức là quan hệ mặt hàng - nghệ sĩ., hay mặt hàng - video,… ) thì giảm được ràng buộc và hiệu suất cao hơn… nếu trong csdl thì đến lúc dùng view(logical table) hay sử dụng hàm thường trú để cải thiện… (bảng ngoài)… tách lọc field theo chuẩn NF1, NF2, NF3 trong csdl là được…