ươ
Ch
ng 2
Ữ
Ệ
Ơ NH NG KHÁI NI M C
Ủ
Ả
Ậ B N C A L P TRÌNH HĐT
ụ
M c tiêu
ố ượ
• Phân bi
ệ ố ượ t đ i t
ớ ng, l p đ i t
ng
ố ượ
ớ
• Mô hình hóa l p đ i t
ng
ừ ượ
ế ừ
• Mô t
ả ượ đ
c tính tr u t
ng hóa, k th a, đóng gói, đa hình
ấ
ớ • So sánh l p và c u trúc
ệ
• Phân bi
t private, public
ộ ớ
ữ ậ
ạ
ằ
• T o ra m t l p b ng ngôn ng l p trình Java
ộ
N i dung
ơ ả
ệ
2.1. Các khái ni m c b n
ấ
ớ
2.2. So sánh l p (classes) và c u trúc (structures)
ế ớ
2.3. Cách vi
t l p trong Java
3
ệ
ơ ả 2.1. Các khái ni m c b n
ố ượ
• Đ i t
ng
ố ượ
ớ
• L p đ i t
ng
ừ ượ
ố ượ
ữ ệ
• Tr u t
ng hoá đ i t
ứ ng theo d li u, ch c năng (Abstraction)
ệ
• Khái ni m đóng gói (Encapsulation)
ệ
ế ừ • Khái ni m k th a (Inheritance)
ệ
• Khái ni m đa hình (Polymorphism)
4
ơ ả ệ 2.1. Các khái ni m c b n ố ượ ng
Đ i t
ồ ạ
ự
ể
ượ
ị
là m t th c th đang t n t
ệ ố i trong h th ng và đ
c xác đ nh
ng
ố ượ • Đ i t ằ
ế ố
b ng ba y u t
ộ :
o Đ nh danh c a đ i t
ố ượ ủ ị ng
ố ượ ủ ạ ộ o Tr ng thái/thu c tính c a đ i t ng
o Hành vi c a đ i t
• Ví d :ụ
ố ượ ủ ng
o Đ i t
ố ượ ệ ắ ng xe A có hi u “Ford”, màu tr ng, giá 50.000$
o Đ i t
5
ố ượ ổ ở ng nhân viên X tên là “Vinh”, 25 tu i, làm phòng hành chính
ơ ả 2.1. Các khái ni m c b n
ệ ố ượ
ớ
L p đ i t
ng
ệ
ừ ượ
ỉ ộ ậ
ể
ợ
ng, dùng đ ch m t t p h p các
ộ →
ả
ớ • L p đ i t ố ượ đ i t
ố ượ ng ạ ng cùng lo i
là m t khái ni m tr u t cùng mô t
, cùng hành vi
• Ví d :ụ
o
o
ộ ớ ố ượ ơ ỉ ấ ả ử ể “Xe h i” là m t l p đ i t ng dùng đ ch t ơ ủ t c các xe h i c a c a hàng
6
ộ ớ ố ượ ể ỉ “Nhân viên” là m t l p đ i t ng dùng đ ch các nhân viên trong văn phòng
ơ ả 2.1. Các khái ni m c b n
ệ ố ượ
ớ
L p đ i t
ng
ố ượ
ớ
• L p và đ i t
ng
o L pớ là s tr u t
•
ự ừ ượ ố ượ ủ ng hoá c a các đ i t ng
ộ ệ i
ạ ở ạ ủ ộ ừ ượ ỉ ồ ng, ch t n t d ng ặ ả các đ c tính chung c a m t
là m t khái ni m tr u t ể ệ khái ni m đ mô t ố ố ượ ng s đ i t
o Đ i t
•
ố ượ ủ ớ ộ ể ệ là m t th hi n c a l p ng
ồ ạ ự ự ệ i trong h
ể ụ ể ộ là m t th c th c th , có th c, t n t th ngố
ơ ả 2.1. Các khái ni m c b n
ệ ố ượ
ớ
L p đ i t
ng
ớ
ươ
ứ
ộ • L p có thu c tính và ph
ng th c:
o Thu c tính c a l p t
ủ ớ ươ ộ ố ượ ứ ủ ớ ộ ng ng v i thu c tính c a các đ i t ng
o Ph
ươ ủ ớ ươ ứ ố ượ ứ ủ ớ ng th c c a l p t ng ng v i các hành vi c a đ i t ng
ố ượ
ộ ớ
ề
ộ
ộ
• T t c các đ i t
ng thu c v cùng m t l p có cùng các thu c tính và các
ấ ả ươ
ph
ứ ng th c
ư
ườ
ế ế ộ ớ
• L u ý trong tr
ợ ng h p thi
t k m t l p
→ ế ề ố ượ ữ ữ ệ ầ ả ầ o C n bi t nh ng thông tin gì v đ i t ộ ớ ng thu c l p này D li u c n mô t ộ (thu c tính)
o C n x lý gì trên đ i t
8
→ ố ượ ử ầ ế ươ ứ ng Hành vi giao ti p (ph ng th c)
ơ ả ệ 2.1. Các khái ni m c b n ứ ữ ệ TTH ĐT theo d li u, ch c năng
ố ượ
ố ượ
ự
ủ
ộ
• Mô hình hóa đ i t
ng d a vào thu c tính, hành vi c a các đ i t
ng
ừ ượ
ố ượ
ữ ệ
ứ
• Quá trình tr u t
ng hóa đ i t
ng theo d li u, ch c năng:
o Mô t
ả ấ ả ố ượ ủ ể ộ t c các thu c tính, hành vi có th có c a đ i t t ng
o Gom các đ i t
ố ượ ươ ự ạ ỏ ộ ệ ộ ng có các thu c tính, hành vi t ng t thành nhóm, lo i b các thu c tính, hành vi riêng bi t
o Xây d ng l p cho t ng nhóm
ự ừ ớ
ỗ ộ • Khai báo các thu c tính cho m i nhóm
• Xây d ng ph
9
ự ươ ứ ủ ỗ ng th c cho hành vi chung c a m i nhóm
ệ ữ ệ
ơ ả 2.1. Các khái ni m c b n ứ TTH ĐT theo d li u, ch c năng
ử
ủ
ả
ặ
ỗ
• Ví d 1: Bài toán qu n lí c a hàng bán ô tô. M i ô tô có m t trong c a hàng
ụ ộ ố ượ là m t đ i t
ng
o Tr u t
ừ ượ ữ ệ ng hóa theo d li u
• Các xe đ u có:
ề ấ ộ ệ ắ ơ nhãn hi u, màu s c, giá bán, công su t đ ng c
• Ngoài ra, m t s ít xe có th có thêm các thu c tính:
ộ ố ể ộ ạ ố có dàn nghe nh c, màn hình xem ti vi, khóa ch ng
ắ ắ ạ ộ ố ố tr m, l p kính ch ng n ng, ch ng đ n…
o Tr u t
ừ ượ ứ ng hóa theo ch c năng
ở ộ ừ ạ ể kh i đ ng máy, ch y, d ng l ạ ắ i, t t máy ề • Các xe đ u có th :
ộ ố ệ ộ ệ ấ ự ậ ư gi u đèn pha, t b t đèn pha, t ự ể ự • Ngoài ra, m t s ít xe có th th c hi n m t s hành đ ng cá bi t nh :
ộ ộ ộ ố ệ đ ng phát tín hi u báo đ ng
ệ ữ ệ
ơ ả 2.1. Các khái ni m c b n ứ TTH ĐT theo d li u, ch c năng
ử
ụ
ả • Ví d 1: Bài toán qu n lí c a hàng bán ô tô
Tên lớp
ớ o L p Xe
Xe
ộ • Thu c tính:
o Nhãn hi u xe
ệ
Thuộc tính
o Màu xe
o Giá xe
Nhãn hiệu Màu sắc Giá Công suất
o Công su t xe
ấ
• Ph
ươ ứ ng th c:
ở ộ o Kh i đ ng xe
Hành vi
ạ o Ch y xe
ừ o D ng xe
Khởi động Chạy Dừng Tắt
ắ o T t máy
ệ ữ ệ
ơ ả 2.1. Các khái ni m c b n ứ TTH ĐT theo d li u, ch c năng
ụ
ế ế ớ
ể ự
ứ
ệ
ố
• Ví d 2: Hãy thi
t k l p Phân s (Rational) đ th c hi n các ch c năng
sau:
PhanSo
o T i gi n phân s (reduce)
ả ố ố
o Ngh ch đ o phân s (reciprocal)
Tu Mau
ả ố ị
o C ng 2 phân s (add)
ố ộ
o Tr 2 phân s (subtract)
ừ ố
o Nhân 2 phân s (multiply)
ố
o Chia 2 phân s (divide)
Toi gian Nghich dao Cong Tru Nhan Chia
ố
ệ ữ ệ
ơ ả 2.1. Các khái ni m c b n ứ TTH ĐT theo d li u, ch c năng
ụ
ườ
ủ
ầ
• Ví d 3: S giao thông c n theo dõi vi c đăng ký xe c a ng
ự i dân. D a vào
ở ị
ứ
ở
ủ ư
ướ
ế
ạ
ệ thông tin tr giá xe và dung tích xylanh c a xe, s giao thông cũng tính m c ả thu ph i đóng tr
c b khi mua xe nh sau:
o D i 100cc, 1% tr giá xe.
Xe
ướ ị
o T 100 đ n 200cc, 3% tr giá xe.
ừ ế ị
o Trên 200cc, 5% tr giá xe.
ị
ế ế
ặ ớ
ộ
ươ
ợ
Hãy thi
ớ t k và cài đ t l p xe v i các thu c tính và ph
So Chu Hieu ứ ng th c phù h p. Gia Dung tich
TinhThue
ệ
ơ ả 2.1. Các khái ni m c b n Tính đóng gói
Nhân viên
ươ
• Xét bài toán tính l
ng nhân viên
o Ti n l
ề ươ ệ ố ươ ươ ỉ ệ ầ ng = H s l ng*L ơ ả ng c b n*T l ph n trăm
o Trong đó, t l
ớ
ỉ ệ ầ ỗ ph n trăm là khác nhau cho m i phòng ban
• Phòng k ho ch là 105%
• Phòng hành chính là 100%
Tên Ngày sinh i tính Gi Phòng ban ệ ố ươ H s l
ng
ế ạ
• Phòng nhân s là 110%
Tính l
ngươ
ự
ố ượ
ứ
ủ
ề • S gi ng nhau v cách s d ng ph
ươ ng th c cho các đ i t ứ
ng c a cùng ớ ng th c có các cách tính toán khác nhau v i ọ
ữ ệ
ự ố ử ụ ộ ớ m t l p, m c dù bên trong ph ượ các đ i t
ặ ố ươ ng khác nhau, đ
ươ c g i là tính
đóng gói d li u
ệ
ơ ả 2.1. Các khái ni m c b n Tính đóng gói
ữ ệ ấ Ẩ • Che d u/ n d li u (private/protected)
o
o
Ẩ ữ ệ ươ n d li u bên trong ph ứ ng th c
• Bên ngoài ch t
Ẩ ữ ệ ố ượ n d li u bên trong đ i t ng
ộ ố
ượ ươ
ỉ ươ ng tác đ ng qua m t s ph
ớ c v i ứ ng th c
ố ượ đ i t (public)
15
ệ
ơ ả 2.1. Các khái ni m c b n Tính đóng gói
ủ ậ
ư ậ
ữ ệ
ướ
ố ượ
• Nh v y, tính đóng gói d li u c a l p trình h
ng đ i t
ng:
o Cho phép che d u cài đ t chi ti
ấ ử ụ ỉ ầ ứ ế bên trong c a ph ng th c. Khi s d ng ch c n g i các ph ứ ng th c theo t
ố ộ ươ ườ ứ ặ ươ ợ ặ ặ ấ m t cách th ng nh t, m c dù các ph ươ ủ ể ượ ng th c có th đ ọ c cài đ t khác nhau cho các tr ng h p khác nhau
ử ụ ự ự ố ế ượ t đ c th c s bên trong đ i
ữ ệ ỉ ấ ố ượ ố ượ ượ ữ ậ ấ o Cho phép che d u d li u bên trong ữ ng có nh ng gì, ch th y đ ủ c a đ i t c nh ng gì đ i t ượ t ng. Khi s d ng, không bi ng cho phép truy nh p vào
ạ ế ố ứ ả i mã
ươ ch ủ ng trình. Khi ph i thay đ i công th c tính toán c a m t ả ươ ươ ứ ổ ọ ổ ng th c, mà không ph i thay đ i các ch ộ ủ ng trình g i
ươ ứ ệ ử ạ o Cho phép h n ch t i đa vi c s a l ổ ỉ ầ ứ ng th c, ch c n thay đ i mã bên trong c a ph ổ ị ng th c b thay đ i ươ ph ế đ n ph
ệ ế ừ
ơ ả 2.1. Các khái ni m c b n Tính k th a
ườ
ộ ườ
ự
ủ
ả
ợ
ng h p bài toán qu n lí nhân s và sinh viên c a m t tr
ng
ụ • Ví d xét tr ạ ọ đ i h c
Nhân viên
Sinh viên
Tên Ngày sinh Giới tính Lương
Tên Ngày sinh Giới tính Lớp
Nhập/xem tên Nhập/xem ngày sinh Nhập/xem giới tính Nhập/xem lương
Nhập/xem tên Nhập/xem ngày sinh Nhập/xem giới tính Nhập/xem lớp
ệ ế ừ
ơ ả 2.1. Các khái ni m c b n Tính k th a
ấ
ề ả • V n đ n y sinh:
o Ph i vi
ế ầ ươ ứ ậ ậ ậ ớ ng th c: nh p/xem tên, nh p/xem ngày sinh, nh p/xem gi i
ả ế t mã trùng nhau đ n hai l n cho các ph ố tính t n công s c ứ
o N u khi có s thay đ i v ki u d li u, ch ng h n ki u ngày sinh đ
ổ ề ể ữ ệ ể ạ ẳ ượ ả ử ạ ệ ố ả c qu n lí trong h th ng, ph i s a l i
ầ ế ươ ch ự ng trình hai l n
ả
ế
ỹ
ủ
ố ầ ế ừ ạ ớ
ử ụ ộ ớ
ượ ạ
ầ
ớ
ậ ế ừ : nhóm các ph n gi ng nhau c a các c t o
i l p đ
i quy t: s d ng • Gi k thu t k th a ớ ớ l p thành m t l p m i, sau đó cho các l p ban đ u k th a l ra này
ế ớ
ỗ ớ
ừ
ộ
• Nh v y, m i l p th a k (l p d n xu t, l p con) đ u có các thu c tính và
ấ ớ ơ ở ớ
ẫ ế ớ
ư ậ ươ
ủ ớ
ị ừ
ứ
ề ng th c c a l p b th a k (l p c s , l p cha)
ph
ệ ế ừ
ơ ả 2.1. Các khái ni m c b n Tính k th a
• Ví d :ụ
Người
Lớp cơ sở/ Lớp cha
Tên Ngày sinh Giới tính
Nhập/xem tên Nhập/xem ngày sinh Nhập/xem giới tính
Nhân viên
Sinh viên
Lớp dẫn xuất/Lớp con
Lương
Lớp
Nhập/xem lương
Nhập/xem lớp
ệ ế ừ
ơ ả 2.1. Các khái ni m c b n Tính k th a
ế ừ
ậ
ướ
ố ượ
• K th a trong l p trình h
ng đ i t
ng:
ẫ ộ ớ ươ ơ ở ươ ứ ự ủ ớ ng th c c a l p c s t ng t ư ử ụ nh s d ng
ấ ươ ộ ể ử ụ o Cho phép l p d n xu t có th s d ng các thu c tính và ph ủ ứ ng th c c a mình các thu c tính và ph
o Cho phép ch c n cài đ t ph
ỉ ầ ặ ươ ứ ở ộ ớ ể ử ụ ơ ở ẫ ng th c m t l p c s , có th s d ng đ ượ ở ấ ả t ấ ớ t c các l p d n xu t c
o Cho phép ch ph i thay đ i m t l n khi c n ph i thay đ i d li u c a các l p
ổ ữ ệ ộ ầ ủ ả ả ầ ổ ớ ỉ
ự ủ ặ ồ ươ ặ o Cho phép tránh s cài đ t trùng l p mã ngu n c a ch ng trình
ơ ả ệ 2.1. Các khái ni m c b n ế ừ Tính k th a
ạ ế ừ
• Các lo i k th a:
o Th a k đ n (single inheritance): M t l p ch có th có t
ế ơ ộ ớ ừ ể ỉ ố ộ ớ i đa m t l p cha
o Th a k b i đa th a k (multiinheritance): M t l p có th có nhi u l p cha
ề ớ ế ộ ộ ớ ừ ừ ể ế
ệ
ơ ả 2.1. Các khái ni m c b n Tính đa hình
Người
• Ví d :ụ
Tên Ngày sinh Giới tính
Khi gọi các phương thức trùng tên, dựa vào đối tượng đang gọi mà chương trình sẽ thực hiện phương thức của lớp tương ứng, và do đó, sẽ cho các kết quả khác nhau
Nhập/xem tên Nhập/xem ngày sinh Nhập/xem giới tính Hiện thông tin
Nhân viên
Sinh viên
Lương
Lớp
Nhập/xem lương Hiện thông tin
Nhập/xem lớp Hiện thông tin
ệ
ơ ả 2.1. Các khái ni m c b n Tính đa hình
ố ượ
• Tính đa hình giúp cho các đ i t
ữ
ư
ặ
ộ ủ
ệ ề
ượ
ệ
ự ng thu c các ki u khác nhau th c hi n c truy n
ể t) c a chúng trong khi đ
ộ
nh ng hành vi đ c tr ng (và khác bi ệ cùng m t thông đi p
ể ệ
ướ
ứ
ề
• Tính đa hình th hi n d
i nhi u hình th c:
o K t n i tr Late Binding
ế ố ễ
o N p ch ng – Overloading (trong cùng 1 l p)
ạ ớ ồ
o Ghi ch ng – Overriding (trong k th a l p cha và con)
23
ế ừ ớ ồ
ệ
ơ ả 2.1. Các khái ni m c b n Tính đa hình
ế ố ễ
• K t n i tr Late Binding
o Là kh năng cho phép ng ọ
ườ ậ ọ ướ ươ ố ượ ứ ủ ố ượ ư ị i l p trình g i tr ộ c m t ph ng th c c a đ i t ng, tuy ch a xác đ nh đ i t ng
ả ươ ứ ố có ph ng th c mu n g i hay không
ệ ươ ị ượ ố ượ ọ ươ ứ ươ ố ượ ủ ứ ự o Khi th c hi n, ch ớ ng trình m i xác đ nh đ c đ i t ng và g i ph ng th c t ng ng c a đ i t ng đó
o K t n i tr giúp ch
ươ ượ ố ượ ể ể ầ ơ ỉ ươ ầ ng trình đ c uy n chuy n h n, ch yêu c u đ i t ấ ng cung c p đúng ph ứ ng th c c n
24
ế ố ễ tế thi
ệ
ơ ả 2.1. Các khái ni m c b n Tính đa hình
ạ
ồ
ớ
• N p ch ng – Overloading (trong cùng 1 l p)
o Là kh năng cho phép m t l p có nhi u thu c tính, ph
ề ộ ươ ứ ư ố ớ ng th c cùng tên nh ng v i các tham s khác nhau
ư ề ố ượ ả ề ạ v lo i cũng nh v s l ộ ớ ng
o Khi đ
ượ ự ề ọ ố ươ ứ ươ ẽ ượ ứ ự ệ c g i, d a vào tham s truy n vào, ph ng th c t ng ng s đ c th c hi n
ế ừ ớ
ồ
• Ghi ch ng – Overriding (trong k th a l p cha và con)
o Hình th c này áp d ng cho l p con đ i v i l p cha
ố ớ ớ ứ ụ ớ
o L p con đ
ớ ữ ệ ư ứ ể ố ố ươ ủ ớ ứ ng th c cùng tên, cùng s tham s có ki u d li u nh ph ng th c c a l p
ươ ữ ướ ặ ặ ớ ớ ớ ượ c phép có m t ph ữ cha ho c nh ng l p tr ộ ớ c đó n a (l p phát sinh ra l p cha…) v i cài đ t khác đi
ươ ứ ươ ẽ ượ ứ ượ ạ ế ng th c riêng, ph ủ ớ ng th c c a l p cha s đ ọ c g i, ng i n u c l
25
ự ươ ượ ế ớ o Lúc th c thi, n u l p con không có ph ọ ứ c g i ủ ớ ng th c c a l p con đ có, ph
2.2. So sánh classes và structures
Structures (cấu trúc)
Classes (lớp)
Khái niệm
Mô tả dữ liệu theo hướng lập trình cấu trúc
Mô tả dữ liệu và hành vi của đối tượng theo hướng OOP
• Nhóm các dữ liệu có liên quan thành một lớp, có phương thức để thực hiện hành của đối tượng
Mục đích và chức năng
• Nhóm các dữ liệu có liên quan thành một đơn vị thống nhất • Có thể gắn hàm đi kèm trong cấu trúc để xử lý dữ liệu
• Làm cho chương trình dễ đọc theo hướng thuật toán • Không hạn chế truy cập
Ưu và Khuyết
• Làm cho chương trình gọn gàng, xử lý đồng bộ và thống nhất • Hạn chế truy cập • Đóng gói • Thừa kế
ế ớ
2.3. Cách vi
t l p trong Java
ớ
ị • Khai báo đ nh nghĩa l p
ể ệ
• Th hi n tính đóng gói
ươ
ủ ớ
ứ
• Ph
ng th c c a l p
ố ượ
ạ
ủ ớ
• T o đ i t
ng c a l p
this
ừ • T khóa
ươ
ứ
ồ
• Ph
ng th c ch ng (Overloading)
27
2.3. Cách vi
ế ớ t l p trong Java ớ ị Khai báo đ nh nghĩa l p
ữ
ộ
• UML (Unified Model Language) là m t ngôn ng dùng cho phân tích thi
ế ế t k
ướ
ố ượ
h
ng đ i t
ng (OOAD – Object Oriented Analysis and Design)
ướ
ố ượ
ệ
• UML th hi n ph
ng pháp phân tích h
ng đ i t
ng nên không l
ộ thu c
ể ệ ươ ữ ậ ngôn ng l p trình
ể ể
ễ
ớ
• Dùng UML đ bi u di n 1 l p trong Java
ễ ở ứ ể o Bi u di n m c phân tích (analysis)
28
ễ ở ứ ế ế ế ể o Bi u di n m c thi t k chi ti t (design)
2.3. Cách vi
ế ớ t l p trong Java ớ ị Khai báo đ nh nghĩa l p
ể ể
ụ
ễ
ớ
• Ví d UML đ bi u di n 1 l p trong Java
Tên l pớ
ộ Thu c tính
ươ
Ph
ứ ng th c
Bỏ qua các chi tiết không cần thiết
29
Phải đầy đủ & chi tiết các thành phần
2.3. Cách vi
ế ớ t l p trong Java ớ ị Khai báo đ nh nghĩa l p
ớ
ữ ệ
ồ • Trong l p bao g m d li u c a đ i t
ng
ủ ươ ọ
ứ methods) tác đ ng ộ ứ
ủ ớ
ươ
ố ượ (fields/properties) và các ph ng th c ( ữ ệ ầ lên thành ph n d li u đó g i là các ph
ng th c c a l p
ở
ượ
• Các đ i t
c t o ra b i các l p nên đ
ng đ
ọ c g i là
ố ượ ể ệ
ượ ạ các th hi n c a l p (
ớ ủ ớ class instance)
Xe - S xeố - Ch xeủ ệ - Hi u xe - Giá xe - Dung tích
ớ
ượ
ạ
• Trong Java, các l p đ
c gom nhóm l
i thành
package
+ Đóng thuế
30
2.3. Cách vi
ế ớ t l p trong Java ớ ị Khai báo đ nh nghĩa l p
// phương thức của lớp
class
{
; // thuộc tính của lớp
;
method_1
method_2
}
ừ
• class: là t
ủ khóa c a Java
ủ ớ
• ClassName: là tên c a l p
•
ủ ớ
ễ
ế
ộ
ể field_1, field_2: là các bi n bi u di n các thu c tính c a l p
31
ươ
ể ệ
ứ
ộ
• method_1, method_2: là các ph
ng th c/hàm th hi n các hành vi tác đ ng
ủ ớ
ữ ệ
ầ
lên các thành ph n d li u c a l p
2.3. Cách vi
ế ớ t l p trong Java ớ ị Khai báo đ nh nghĩa l p
ề
ấ
• Các quy n truy xu t trong Java: public, private, protected, default
ủ ượ ẽ ượ ậ ở ấ ứ ầ o Thành ph n c a class đ c khai báo public s đ c truy c p b t c đâu
ủ ượ ỉ ượ ấ ậ ớ ầ o Thành ph n c a class đ c khai báo private ch đ c truy c p bên trong class, bên ngoài l p không truy xu t
đ cượ
ượ ẽ ượ ở ấ ứ ậ ộ ầ o Thành ph n c a class đ protected s đ c truy c p b i b t c class nào bên trong cùng m t gói
c khai báo ủ ể ủ ặ ở ớ (package) ho c l p con c a nó (có th khác gói)
ầ ặ ị ẽ ượ ở ấ ứ ậ m c đ nh c khai báo (không có visibility modifier) s đ c truy c p b i b t c class nào bên
32
ượ o Thành ph n đ ộ trong cùng m t gói (package)
t l p trong Java
2.3. Cách vi ể ệ
ế ớ Th hi n tính đóng gói
ữ ệ
ượ
ị
• D li u nên đ
c đ nh nghĩa v i b t
ớ ổ ừ private
o D li u private ch có th đ
ữ ệ ể ượ ỉ ậ ở ươ ứ ủ c truy c p b i các ph ng th c c a class
o Có th cung c p các ph
ể ấ ươ ứ ể ậ ng th c public đ truy c p
ể ượ
ị
• Các method có th đ
c đ nh nghĩa
public ho c ặ private
o public method: cung c p d ch v cho l p khác dùng class này (
ụ ấ ớ ị service methods)
o private method: không th đ
ể ượ ọ ừ ể c g i t
ụ ệ ươ ươ ủ ứ ọ ấ ủ bên ngoài class. M c đích duy nh t c a private method là đ giúp cho ộ ng ng th c khác trong cùng m t class làm công vi c c a nó, các ph ng th c này còn g i là ph
33
ữ ứ ươ nh ng ph th c h tr ( ứ ỗ ợ support methods)
t l p trong Java
2.3. Cách vi ể ệ
ế ớ Th hi n tính đóng gói
ụ ớ • Ví d : L p Xe
Rectangle
class Xe
-
{
length - width
+ area
Xe - S xeố - Ch xeủ ệ - Hi u xe - Giá xe - Dung tích
private String soXe; private String chuXe; private String hieuXe; private double giaXe; private int dungTich;
+ Đóng thuế
//…
}
34
ế ớ
ươ
2.3. Cách vi Ph
t l p trong Java ứ ủ ớ ng th c c a l p
ạ
ươ
ứ
• Có hai lo i ph
ng th c:
o Ph
ươ ở ạ ứ ng th c kh i t o (constructor)
o Các ph
ươ ứ ng th c khác
• Ph
ươ ể ệ ứ ng th c th hi n (instance method)
• Ph
35
ươ ứ ng th c tĩnh (static methods)
ế ớ
ươ
2.3. Cách vi Ph
t l p trong Java ứ ủ ớ ng th c c a l p
ươ
ở ạ
ứ
• Ph
ng th c kh i t o (constructor)
o Là ph
ươ ượ ố ượ ạ ọ ứ ng th c đ c g i khi t o đ i t ng (object)
o M c đích: Dùng đ gán giá tr ban đ u cho các thu c tính c a l p
ủ ớ ụ ể ầ ộ ị
o Ph i th a 2 đi u ki n:
• cùng tên class
ệ ề ả ỏ
• không giá tr tr v , cũng không ph i void
ị ả ề ả
o M t l p có th có nhi u constructor
ộ ớ ể ề
o N u không vi
ế ế ặ ạ ị ị t constructor, trình biên d ch t o constructor m c đ nh
• constructor m c đ nh không có tham s và t
36
ặ ố ị ự ị ặ ị gán các giá tr m c đ nh
ế ớ
ươ
2.3. Cách vi Ph
t l p trong Java ứ ủ ớ ng th c c a l p
ươ
ể ệ
ứ
• Ph
ng th c th hi n (instance method)
o Dùng đ :ể
• Đ nh nghĩa hành vi c a đ i t
ố ượ ủ ị ng
• Cung c p cách th c truy xu t t
ấ ớ ứ ấ ủ ộ ố i các thu c tính riêng c a đ i
ngượ t
o Đ c truy xu t thông qua m t đ i t
37
ộ ố ượ ượ ấ ụ ể ng c th
ế ớ
ươ
2.3. Cách vi Ph
t l p trong Java ứ ủ ớ ng th c c a l p
ươ
ứ
• Ph
ng th c tĩnh (static methods)
o Là nh ng ph
ữ ươ ượ ầ ạ ố ượ ọ ứ ng th c đ ớ c g i thông qua tên l p (không c n t o đ i t ng)
o Khai báo ph
ươ ứ ừ static ng th c thêm t khóa
o Ch có th truy xu t 1 cách tr c ti p t
ế ớ ự ể ấ ỉ ế ươ ủ ớ ứ i các bi n tĩnh (static) và các ph ng th c tĩnh khác c a l p
o Không th truy xu t đ n các ph
38
ấ ế ể ươ ứ ế ng th c và bi n không tĩnh (nonstatic)
ế ớ
ố ượ
2.3. Cách vi ạ T o đ i t
t l p trong Java ủ ớ ng c a l p
ố ượ
ạ
• T o đ i t
ng: dùng toán t
ử new, cú pháp:
// gọi tới contructor mặc định ClassName objectName = new ClassName(); // hoặc gọi tới constructor có tham số ClassName objectName1 = new ClassName( ts1, ts2, … );
o Khi t o object b ng toán t
ằ ạ ớ ượ ấ ộ ươ ố ượ ủ ứ ỗ c c p phát cho m i thu c tính và ph ng th c c a đ i t ng ử new, vùng nh đ
ộ
ươ
ứ
ử
• Truy xu t các thu c tính và ph
ủ ớ ng th c c a l p: dùng
toán t
ch m
ấ (dot
ấ operator)
39
ế ớ
ố ượ
2.3. Cách vi ạ T o đ i t
t l p trong Java ủ ớ ng c a l p
ạ
ặ
ộ
ị
• N u m t class không có constructor, trình biên d ch t o ra constructor m c
ố
ế ị
đ nh không có tham s
ố ể
ặ
ộ
• N u class có m t ho c nhi u constructor, b t k tham s ki u gì, trình biên
ẽ
ề ị
ấ ể ữ
ế ị
ặ d ch s không thêm m c đ nh constructor n a
40
2.3. Cách vi
t l p trong Java
ế ớ Ví dụ
ặ
ớ
ị
• L p không có constructor m c đ nh
HinhChuNhat n; // khai báo đối tượng
// khởi tạo, cấp vùng nhớ bằng toán tử new
n = new HinhChuNhat( 3, 6 );
41
2.3. Cách vi
t l p trong Java
ế ớ Ví dụ
ủ
ầ
ớ
• L p có đ y đ constructor
HinhTron n1, n2; // khai báo đối tượng
// khởi tạo, cấp vùng nhớ bằng toán tử new
// khởi tạo dùng constructor 1 tham số
n1 = new HinhTron(3);
// khởi tạo dùng constructor không tham số
n2 = new HinhTron();
42
2.3. Cách vi
t l p trong Java
ế ớ Ví dụ
43
t l p trong Java
2.3. Cách vi ừ
this
ế ớ T khóa
ượ
ể ọ
ừ • T khóa
this đ
c dùng đ g i constructor:
o Đ tránh l p l
ặ ạ ể ể ọ ộ ớ ộ ộ i mã, m t constructor có th g i m t constructor khác trong cùng m t l p
o N u dùng t
ế ể ọ ừ ế ệ ầ ả khóa this đ g i constructor, thì t khóa this ph i là dòng l nh đ u tiên trong constructor đó (n u
ị ừ ẽ ị ỗ không, s b l i biên d ch)
ượ
ư ế
ố ượ
ệ
ạ
ệ ạ
ừ • T khóa
this đ
c dùng nh bi n đ i di n cho đ i t
ng hi n t
i:
ố ượ ủ ể ấ ầ ộ o Dùng đ truy xu t m t thành ph n c a đ i t ng this.tênThànhPh nầ
44
ờ ừ ố ộ ể ệ ớ ộ ố ớ o Khi tham s trùng v i tên thu c tính thì nh t khóa this đ phân bi t rõ thu c tính v i tham s
t l p trong Java
2.3. Cách vi ừ
this
ế ớ T khóa
• Dùng this trong contructor
45
t l p trong Java
2.3. Cách vi ừ
ế ớ T khóa this
ế
• Dùng this nh ư ạ ệ bi n đ i di n ố ượ ng cho đ i t
46
t l p trong Java
2.3. Cách vi ừ
ế ớ T khóa this
ế
• Dùng this nh ư ạ ệ bi n đ i di n ố ượ ng cho đ i t
Truy cập thành phần không qua từ khóa this
Truy cập thành phần qua từ khóa this
47
ươ
t l p trong Java ồ
ế ớ ứ
2.3. Cách vi Ph
ng th c ch ng
ươ
ứ
ồ
• Ph
ng th c ch ng là:
o Các ph
ươ ộ ớ ứ ng th c trong cùng m t l p có cùng tên
ố ượ ả ể ố ố o Danh sách các tham s ph i khác nhau (khác s l ố ặ ng tham s ho c ki u tham s )
ố ự
ế ị
ể
ọ
ị
ươ
• Trình biên d ch so sánh danh sách thông s th c đ quy t đ nh g i ph
ng
ứ
th c nào
ế
ề
• Các constructor cũng có th đ
t ch ng
ồ cho ta nhi u cách khác
ộ ố ượ
ể ạ
nhau đ t o ra m t đ i t
ể ượ c vi ớ ng m i
48
ươ
t l p trong Java ồ
ế ớ ứ
2.3. Cách vi Ph
ng th c ch ng
Version 1
Version 2
float tryMe (int x, float y) { return x*y; }
float tryMe (int x) { return x + .375; }
Invocation
Version 1
Version 2
result = tryMe (25, 4.32)
int tryMe (int k) { return k*k; }
float tryMe (int x) { return x + .375; }
Not Overloading method
49
50