Môn học: Lập trình cơ bản với Java
Chương III: Đối tượng trong Java
Th
Mục đính – Yêu cầu:
Sau khi học xong bài này sinh viên sẽ nắm được:
Lập trình hướng đối tượng với java
Lớp và đối tượng
Kế thừa
Đa hình
Package, Interface
Số tiết lên lớp: 8
Bảng phân chia thời lượng:
Stt
01
02
03
04
Nội dung
ập trình hướng đối tượng với ava
ớp và đối tượng
ế thừa đa hình
Package, Interface
Số tiết
2
1
3
2
Trọng tâm bài giảng:
Lập trình hướng đối tượng với java
Lớp và đối tượng
Kế thừa
Package
93
3.1. Khái niệm lập trình hướng đối tượng ([1] trang 33, [2] trang 85)
3.1.1. Khái niệm
i một chương trình máy tính đ u g m c 2 ph n: ph n mã lệnh và ph n dữ liệu.
Một ố chương trình đặt trọng tâm ở ph n mã lệnh, ố khác đặt trọng tâm ở ph n dữ liệu.
Từ đ
n đến 2 mô hình
ết định nên c u trúc của chương trình : một trả lời cho câu
hỏi “Đi u gì đang xả ra” và một cho “Cái gì đang chị tác động”.
hình hướng xử lý chương trình bao g m một ch
ô hình 1 gọi là mô
i các thao tác xử lý (mã lệnh). Nhưng
khi chương trình càng ngày càng lớn và phức tạp thì kh khăn đ sử dụng mô hình thứ
nh t.
Vì vậy mô hình thứ 2 được đưa ra đ là mô hình hướng đối tượng. Chương trình
của bạn sẽ xây dựng dựa vào dữ liệu và ph n giao diện được định nghĩa cho ph n dữ liệu
đ .
Phương pháp giải quyết từ trên xuống (Top-Down) cũng còn được gọi là “lập trình
hướng c
trúc” (Str ct re Programming). N xác định những chức năng chính của một
chương trình và những chức năng nà được phân thành những đơn vị nhỏ hơn cho đến
mức độ th p nh t. Bằng kỹ thuật nà
các chương trình được c u trúc theo hệ thống phân
c p các module. M i một module có một đ u vào riêng và một đ u ra riêng. Trong m i
module, sự đi u khi n có chi
hướng đi x ống theo c u trúc
Phương pháp OOP trừ tượng các lớp từ các đối tượng trong thế giới thực chương
trình của bạn sẽ được xây dựng từ các lớp. Phương pháp OOP cố gắng quản lý việc thừa
kế phức tạp trong những v n đ thực tế. Đ làm được việc nà
phương pháp OOP che
gi u một vài thông tin bên trong các đối tượng. OOP tập tr ng trước hết trên dữ liệu. R i
gắn kết các phương thức thao tác trên dữ liệu
Lập trình hướng đối tượng (OOP) là một phương pháp phát tri n ph n m m.
Những ngôn ngữ OOP không chỉ bao g m cú pháp và một trình biên dịch (compiler) mà
còn có một môi trường phát tri n toàn diện.
ôi trường này bao g m một thư viện được
thiết kế tốt, thuận lợi cho việc sử dụng các đối tượng.
Hãy xem xét một tình huống c n được tri n khai thành một hệ thống trên máy tính:
m a bán xe hơi. V n đ vi tính hóa việc m a bán xe hơi bao g m những gì?
94
Những thực th rõ ràng nh t liên
Các ki
an đến việc m a bán xe hơi là:
xe hơi
Nhân viên bán hàng
Khách hàng
H a đơn.
Những hoạt động liên quan đến việc mua bán:
Nhân viên bán hàng đưa khách hàng tham
an phòng trưng bà .
Khách hàng chọn lựa một xe hơi.
hách hàng đặt h a đơn.
Khách hàng trả ti n.
Chiếc xe được trao cho khách hàng.
M i v n đ được chia ra thành nhi u yếu tố được gọi là các Đối tượng (Objects).
Chẳng hạn như ở ví dụ trên khách hàng xe hơi và nhân viên bán hàng là những đối
tượng
Lập trình viên luôn luôn cố gắng tạo ra những kịch bản (scenarios) thật quen thuộc
với những tình huống thực tiễn. Đ chính là vai trò của kỹ thuật hướng đối tượng. Chúng
ta sử dụng kỹ thuật hướng đối tượng đ ánh xạ những thực th chúng ta gặp phải trong
đời sống thực thành những đối tượng và mối quan hệ giữa chúng
Phương pháp lập trình hướng đối tượng có các khả năng a :
- Mô phỏng thế giới thực một cách tự nhiên bởi các đối tượng và mối quan hệ giữa
chúng, thuận tiện cho việc thiết kế hệ thống phức tạp. Phương pháp nà tiến hành tiến
trình phân tích, thiết kế và phát tri n một v n đ trong khuôn khổ những khái niệm và
thuật ngữ thuộc lĩnh vực ứng dụng. Vì thế, có một sự tương hợp cao nh t giữa việc phát
tri n ứng dụng và v n đ thực tế.
- Thừa kế và tái sử dụng mã có sẵn một cách dễ dàng, giúp tiết kiệm công sức, chi
phí và nâng cao năng
t của người lập trình, dễ bảo trì, dễ nâng c p, mở rộng, giảm
thi u các l i và những v n đ liên
an đến việc bảo trì ứng dụng do khả năng tái ử dụng
các đối tượng.
95
Lập trình hướng đối tượng đ cập đến dữ liệu và thủ tục xử lý dữ liệu theo quan
đi m là một đối tượng duy nh t. Lập trình hướng đối tượng xem xét dữ liệ như là một
đối tượng hay là một đơn vị độc lập, với bản ch t riêng và những đặc tính của thực th
y.
Bây giờ chúng ta hãy khảo sát những thuật ngữ đối tượng (Object), thuộc tính (Attribute)
và phương thức (method).
3.1.2. Trừu tượng hóa (Abstraction)
Con người đơn giản hoá độ phức tạp của thế giới thực thông qua sự phân c p trừu
tượng. Nhìn bên ngoài, máy tính có hộp đi u khi n, màn hình, bàn phím, chuột..., các bộ
phận này lại bao g m các bộ phận nhỏ hơn như hộp đi u khi n có bảng mạch chính chứa
CPU, các mạch giao tiếp gắn trên n
đĩa cứng... Nhờ trừ tượng hoá người dùng chỉ
quan tâm mối quan hệ, giao tiếp giữa các bộ phận, mà không quan tâm c u trúc chi tiết
từng bảng mạch trong máy tính.
Vậy trừ tượng là
á trình xác định các khía cạnh c n thiết của đối tượng, của hệ
thống và bỏ qua các khía cạnh không quan trọng. Đi
đ c nghĩa là chúng ta phải tập
tr ng xác định đối tượng " à gì ?" và n " àm gì ?" nghĩa là đối tượng bao g m các
thuộc tính gì phương thức gì ? trước khi quyết định cách n được thực thi. Sự phân c p
trừ tượng một hệ thống phức tạp cho phép bạn phân lớp các thành ph n c ý nghĩa của
cả hệ thống phức tạp, chia nhỏ chúng thành những thành ph n đơn giản có th quản lý
được. Ph n dữ liệu từ một chương trình hướng xử lý kinh đi n được trừ tượng hoá thành
các đối tượng thành ph n. Dãy các xử lý trở thành các thông điệp giữa các đối tượng. Bạn
c th xem các đối tượng nà như những thực th độc lập tiếp nhận các ê c
từ bên
ngoài. Đâ là ph n cốt l i của lập trình hướng đối tượng.
Hãy khảo át chương trình ứng dụng cho việc m a bán xe hơi n i trên. Chương
trình phải xu t h a đơn cho những xe hơi đã bán cho khách hàng. Đ xu t một h a đơn
chúng ta c n những thông tin chi tiết v khách hàng. Vậ bước thứ nh t là xác định những
đặc tính của khách hàng.
Một vài đặc tính gắn kết với khách hàng là:
Họ và Tên
Địa chỉ
96
Ngày sinh
Số điện thoại.
Email
Chi u cao
à t c…
Từ danh sách k trên chúng ta xác định những đặc tính thiết yế đối với ứng dụng.
Bởi vì chúng ta đang đ cập đến những khách hàng mua xe, vì thế những chi tiết thiết yếu
là:
Họ và Tên
Địa chỉ
Còn những chi tiết khác (chi
cao mà t c …) không
an trọng đối với ứng
dụng.
Ngoài ra c n phải xác định các đặc tính của nhân viên bán xe, ki
xe hơi nào được
bán. Bên cạnh những đặc tính của khách hàng xe hơi và nhân viên bán hàng chúng ta
cũng c n liệt kê những hành động được thực hiện
Công việc xu t h a đơn đòi hỏi những hành động sau:
Nhập họ tên của khách hàng.
Nhập địa chỉ khách hàng
Nhập ki u xe.
Nhập tên nhân viên bán xe.
Xu t h a đơn với định dạng yêu c u
h ng thông tin bên ưới cho th y những thuộc tính và những hành động liên
an đến một h a đơn:
Các thuộc tính
Tên của khách hàng
Địa chỉ của khách hàng
Kiểu xe bán
Tên nhân viên bán xe
Giá tiền
Các hành động
97
Nhập tên khách hàng
Nhập địa chỉ khách hàng
Nhập kiểu xe
Nhập tên nhân viên bán xe
Nhập giá tiền
Xuất hóa đơn
Vậy sự trừ tượng hóa dữ liệ là á trình xác định và nhóm các thuộc tính và các
hành động liên
an đến một thực th cụ th , xét trong mối tương
an với ứng dụng
đang phát tri n.
Những ư đi m của việc Trừ tượng hóa là:
Tập trung vào v n đ .
Xác định những đặc tính thiết yếu và những hành động c n thiết.
Giảm thi u những chi tiết không c n thiết.
Việc trừ tượng hóa dữ liệu là c n thiết, bởi vì không th mô phỏng t t cả các hành
động và các thuộc tính của một thực th . V n đ m u chốt là tập tr ng đến những hành vi
cốt yếu và áp dụng chúng trong ứng dụng.
3.1.3. Triển khai mô hình hướng đối tượng
t cả các ngôn ngữ lập trình hướng đối tượng đ
c các cơ chế cho ph p bạn
tri n khai các mô hình hướng đối tượng. Đ là tính đ ng g i kế thừa và tính đa hình.
3.1.3.1. Tính đóng gói (Encapsulation)
Đâ là cơ chế dùng một vỏ bọc kết hợp ph n dữ liệu và các thao tác trên dữ liệ đ
(ph n mã lệnh) thành một th thống nh t, tạo nên sự an toàn, tránh việc sử dụng không
đúng thiết kế, bảo vệ cho mã lệnh và dữ liệu chống việc truy xu t từ những đoạn mã lệnh
bên ngoài
Lớp (Class)
rong Java tính đ ng g i th hiện qua khái niệm lớp (Class). Lớp là hạt nhân của
Java, tạo n n tảng cho lập trình hướng đối tượng trong Java. Lớp định nghĩa hai ph n
chính là dữ liệu (các thuộc tính) và hành vi (các phương thức), gọi là các thành viên của
lớp
ùng ch ng cho các đối tượng cùng loại. Từ sự phân tích hệ thống người ta trừu
98
tượng nên các lớp. Sa đ các đối tượng được tạo ra theo khuôn m u của lớp. M i đối
tượng thuộc một lớp có dữ liệ và hành vi định nghĩa cho lớp đ
giống như là inh ra từ
một kh ôn đúc của lớp đ . Vì vậy mà lớp là khuôn m u của đối tượng đối tượng là th
hiện của một lớp. Lớp là c
trúc logic còn đối tượng là c u trúc vật lý. Phương thức
định nghĩa cho việc sử dụng dữ liệ như thế nào. Đi
được định nghĩa thông
nà c nghĩa là hoạt động của lớp
a phương thức.
Giả sử bạn phải tạo ra giao diện với người dùng và c n có những nút nh n
(Button). Vậ thì trước hết bạn xây dựng lớp Button với các thuộc tính như nhãn ghi trên
nút, chi u rộng, chi u cao, màu của nút đ ng thời
định hành vi của nút nh n nghĩa là
nút nh n c n phản ứng như thế nào khi được chọn, phát yêu c
gì c đổi màu hay nh p
nháy chi không. Với lớp B tton như vậy, bạn có th tạo ra nhanh chóng những nút nh n
cụ th cho các mục đích khác nha
Xét hệ thống bán xe hơi các hành động và các thuộc tính sau là chung cho mọi hóa
đơn cho khách hàng m a xe. Ví th , chúng có th được nhóm lại thành một lớp
Lớp Hóa đơn
Các thuộc tính
Tên của khách hàng
Địa chỉ của khách hàng
Kiểu xe bán
Tên nhân viên bán xe
Giá tiền
Các hành động
Nhập tên khách hàng
Nhập địa chỉ khách hàng
Nhập kiểu xe
Nhập tên nhân viên bán xe
Nhập giá tiền
Xuất hóa đơn
Những thuộc tính và những hành động chung của các đối tượng h a đơn được
nhóm lại đ tạo nên một đơn vị duy nh t gọi là một lớp H a đơn
Gói (Package)
99
Gói là kỹ thuật của Java
ùng đ phân hoạch không gian tên lớp, giao diện thành
những vùng dễ quản lý hơn th hiện tính đ ng g i của Java.
Đối tượng (Object)
Một lớp là một nguyên m u phác họa những thuộc tính và những hành động có th
của một thực th . Đ có th sử dụng thực th mà lớp định nghĩa chúng ta phải tạo một đối
tượng từ lớp đ .
Lớp là một khái niệm, khuôn m
còn đối tượng là một th hiện, một trường hợp
cụ th của lớp.
Khi một người mua một xe hơi ở một cửa hàng, cửa hàng y có một khách hàng
mới. Vào thời đi m y, một đối tượng giống như lớp H a đơn được tạo ra. Đối tượng này
sẽ phải có những giá trị thực đối với các thuộc tính. Chẳng hạn như một khách hàng có
tên là ‘X ân’ ống ở ‘Đà nẵng’ đã m a một xe ki
‘Hon a Civic’ từ nhân viên bán hàng
tên là ‘Đông’ với giá ti n là50 triệu
K từ lúc một đối tượng hiện hữu, những thuộc tính của nó là những giá trị xác
định, và những hành động được định nghĩa cho đối tượng nà được thực thi.
M i đối tượng có những đặc tính riêng mô tả đối tượng y là gì, hoặc hành động ra
sao.
Thuộc tính (Attribute)
M i thuộc tính là mộtđặc tính mô tả đối tượng. Như thế, các thuộc tính nắm giữ
các giá trị dữ liệu trong một đối tượng chúng định nghĩa một đối tượng cụ th .
Bởi vì một lớp là một khuôn m u cho nên các thuộc tính trong một lớp không th
nắm giữ các giá trị. Một thuộc tính có th được gán một giá trị chỉ sau khi một đối tượng
dựa trên lớp
được tạo ra.
Đ có th lư giữ những chi tiết của một h a đơn một th hiện (đối tượng) của lớp
‘H a đơn’ phải được tạo ra.
Phương thức (Method)
Phương thức là sự xác định v cách thức thực thi một hoạt động được yêu c u.
Các phương thức xác định cách thức thao tác trên các dữ liệu của một đối tượng.
Bởi vì phương thức là sự thực thi thực tế một hoạt động, cho nên nó có th được áp dụng
100
cho một đối tượng. Một phương thức là một thuật toán xác định đi
khi hoạt động
gì được thực hiện
được yêu c u.
Thông điệp (Message)
Đ yêu c u một hoạt động cụ th nào đ được thực hiện, một thông điệp được gởi
tới đối tượng nơi hoạt động nà được định nghĩa.
Một thông điệp là một lời yêu c u một hoạt động.
Khi một đối tượng nhận được một thông điệp, nó thực hiện một phương thức
tương ứng.
Sự kiện (Event)
Một sự kiện là một sự việc xảy ra cho một đối tượng tại một thời đi m. Đ đáp ứng
lại sự kiện
đối tượng sẽ thực hiện một hoặc nhi
phương thức.
Nói cách khác, một sự kiện o đối tượng này gây ra cho một đối tượng khác.
Chẳng hạn như click ch ột trái trên một nút.
Ví dụ: Một quả bóng sẽ bị xì hơi khi xảy ra sự kiện làm thủng quả bóng
Hay sự kiện người sử dụng nh n một nút trên bàn phím. Sự phản h i đối với sự
kiện này là việc hi n thị ký tự tương ứng trên màn hình.
3.1.3.2. Tính kế thừa (Inheritance)
C các đối tượng tương tự nha với một ố th ộc tính và phương thức và cả mối
an hệ. Nế mức độ tượng tự nha lớn thật là hữ ích khi ùng ch ng những đặc tính
nà . hừa kế cho ph p định nghĩa một lớp như là một lớp ch ng gọi là lớp cha (S per
Cla ) các lớp thừa kế đặc tính ch ng từ lớp cha gọi là lớp con (S b Cla ). Q á trình
hình thành lớp cha gọi là khái
át hoá (Generalization) và lớp con là ch ên biệt hoá
(Specialization). ớp con thừa kế t t cả các th ộc tính phương thức toàn cục (p blic) ha
bảo vệ (protecte ) và mối
mối
an hệ của riêng mình.
an hệ ở lớp cha và bổ
ng các th ộc tính phương thức
nhiên một lớp con c th định nghĩa lại các phương thức
thừa kế.
Vậy tính kế thừa là khả năng xâ
ựng các lớp mới từ các lớp đã c .
hi lớp đ ng
gói một số dữ liệ và phương thức, lớp mới sẽ kế thừa c u trúc dữ liệ và các phương
101
thức của lớp mà nó kế thừa. Ngoài ra nó có th bổ sung các dữ liệ và các phương thức
của riêng mình.
Nhờ tính kế thừa mà hệ thống hướng đối tượng có th thực hiện tái sử dụng mã.
Nó r t quan trọng vì nó ứng dụng cho khái niệm cây phân c p (mô hình Top-Down).
Không sử dụng cây phân lớp, m i lớp phải định nghĩa t t cả các dữ liệ và phương thức
của mình một cách rõ ràng. Nếu sử dụng sự kế thừa, m i lớp chỉ c n định nghĩa thêm
những đặc trưng của mình.
Ví dụ: Lớp QuanLy và NVBanHang là lớp cụ th , có các thuộc tính, thao tác giống
nha như lớp NhanVien, ví dụ các thuộc tính maNV ho en
thao tác như them() xoa()
iaChi nga Sinh… c các
a() hien hi()… nhưng m i lớp có thêm những thuộc tính,
thao tác và cả mối quan hệ bổ sung.
ụ: Xe có th xem như một lớp và các xe Pergo t BW
tượng của lớp xe. Các xe đ u có th lái đi
các lớp xe đạp xe má
Dream là các đối
ừng lại... Từ lớp xe ở trên, ta có th xây dựng
xe ôtô. Xe ôtô c thêm động cơ và c th tự khởi động…
102
Có các hình thức kế thừa:
- Kế thừa đơn (Single Inheritance): là lớp con không th thừa kế nhi
hơn một lớp
cha
Ví dụ: Quan hệ tổng quát hóa giữa lớp NhanVien, QuanLy và NVBanHang
- Kế thừa bội (Multiple Inheritance): là lớp con có th thừa kế nhi
hơn một lớp
cha. Ví dụ lớp con QLBANHANG thừa kế các đặc tính từ cả hai lớp cha QUANLY và
NVBANHANG. Cơ chế thừa kế bội là v n đ khó khi phải cung c p một phương pháp xử
lý đối lập phát sinh khi các lớp cha chứa thuộc tính ha phương thức giống nhau. Không
phải t t cả các ngôn ngữ hướng đối tượng và cơ ở dữ liệ nào cũng h trợ thừa kế bội.
Java là ngôn ngữ không h trợ tính đa thừa kế
3.1.3.3. Tính đa hình (Polymorphism)
Trong lập trình hướng c u trúc, một phương thức chỉ áp dụng cho một đối tượng.
Chẳng hạn xét toán tử Cộng. Toán tử này chỉ tính tổng của hai số nguyên. Khi truy n hai
giá trị 2 và 3 thì nó hi n thị 5. Chúng ta không th sử dụng toán tử Cộng đ tính tổng của
hai chu i ‘Hello!’ và ‘How are o ?’ đ c được chu i kết quả ‘Hello! How are o ?’
Trong hệ thống hướng đối tượng thì tình huống mô tả trên là có th .
ính đa hình cho ph p một phương thức có các cách th hiện khác nhau trên nhi u
loại đối tượng khác nhau. Với tính đa hình nếu cùng một phương thức ứng dụng cho các
đối tượng thuộc các lớp khác nha thì n đưa đến những kết quả khác nha . ính đa hình
là một trong những đặc tính quan trọng nh t của hệ thống hướng đối tượng.
Một ví dụ khác là phương thức Vẽ được chia sẻ giữa các lớp con của lớp Hình Vẽ.
nhiên phương thức Vẽ được ứng dụng cho hình hộp sẽ khác với hình elip. Xét trên
mức độ người sử dụng, họ chỉ c n một phương thức Vẽ của lớp Hình Vẽ. Còn cách thức
mà phương thức Vẽ được thực thi cho các trường hợp khác nhau thì họ không c n biết.
Với ngôn ngữ lập trình Java tính đa hình th hiện:
Khi một lớp được kế thừa từ các lớp tổ tiên thì n c th tha đổi
cách thức làm việc của lớp tổ tiên trong một số phương thức nào đ (nhưng tên
ki u trả v
anh ách tham đối của phương thức thì v n giữ ng ên). Đi u này
gọi là viết chồng hàm (overriding method). Như vậy với một tên phương thức,
103
chương trình c th c các hành động khác nhau tùy thuộc vào lớp của đối tượng
gọi phương thức. Đ là tính đa hình
Ví dụ: với phương thức chạy, xe ôtô, xe máy có th tăng ga còn xe đạp thì phải
đạp…
ính đa hình còn th hiện ở việc cho phép tên của một phương thức
được dùng lại trong định nghĩa lớp c nghĩa là một thông điệp có th thực hiện
nhi
phương thức khác nhau tuỳ vào đối tượng nhận thông điệp đ
ha n i cách
khác là vào tham đối truy n cho phương thức. Đi u này gọi là nạp chồng hàm
(overloading method).
ính đa hình còn th
hiện ở việc một giao diện (giao tiếp -
interface) có th sử dụng cho các hoạt động của một lớp tổng quát, hay còn gọi là
“một giao diện, nhi
phương thức”. C nghĩa là c th thiết kế một giao diện
tổng quát cho một nh m các hành vi liên
an. Đi u này giảm thi u sự phức tạp
bằng cách cho phép một giao diện có th sử dụng cho các hoạt động của một lớp
tổng quát. Trình biên dịch sẽ xác định hoạt động cụ th nào sẽ được thi hành tuỳ
theo đi u kiện. Bạn chỉ c n nhớ các giao diện của lớp tổng quát và sử dụng nó.
Vậ tính đa hình cho ph p các đối tượng khác nha đáp ứng cùng một thông điệp
theo các cách khác nhau.
Sự kết hợp đúng đắn giữa đa hình đ ng g i và kế thừa tạo nên môi trường lập
trình có khả năng phát tri n tốt hơn r t nhi u so với môi trường không h trợ hướng đối
tượng. Một cây phân c p lớp thiết kế tốt là đi
căn bản cho việc sử dụng lại những đoạn
mã lệnh mà bạn đã tốn công sức nhi u cho việc phát tri n và ki m tra. ính đ ng g i cho
phép bạn sử dụng các đối tượng và ra lệnh thi hành tới chúng mà không phá vỡ c u trúc
các đoạn mã lệnh đã bảo vệ bởi giao diện của các lớp. Sự đa hình cho ph p bạn tạo ra
những đoạn mã lệnh gọn gàng, dễ đọc, dễ hi u và có tính ổn định.
Java là ngôn ngữ lập trình hướng đối tượng nên c đ
viện lớp Java được cung c p khá đ
đủ các tính năng trên thư
đủ cho người lập trình đ bắt đ u một dự án mới
104
3.2. Lớp và đối tượng ([1] trang 36, [2] trang 85)
3.2.1. Lớp (Class)
a. Khái niệm
Chúng ta có th xem lớp như một khuôn m u (template) của đối tượng (Object).
rong đ
bao g m dữ liệu của đối tượng (fields hay properties) và các phương
thức(metho ) tác động lên thành ph n dữ liệ đ gọi là các phương thức của lớp.
Các đối tượng được xây dựng bởi các lớp nên được gọi là các th hiện của lớp
(class instance).
b K a bá / đị
ĩa lớp
[public]
ớp được tr x t ch ng cho
các g i khác mặc định chỉ c
các đoạn mã trong cùng một g i
mới tr x t n
ớp trừ tượng không th khởi
tạo
ớp hằng không c lớp con
[final]
class ClassName
ên lớp
[extends SuperClass]
ế thừa một lớp cha S perCla
[implements Interfaces] Cài đặt các giao iện Interface
{ //Member Variables
hai báo các biến thành viên
Declarations
[abstract]
//Methods Declarations
hai báo các phương thức (hàm)
}
ụ: Tạo một lớp các đối tượng nhân viên như a :
class NhanVien {
private String hoTen;
private int namSinh;
private float heSoLuong;
static int luongCB;
}
3.2.2. Đối tượng (Object)
Đ c được các đối tượng của một lớp phải
105
a hai giai đoạn :
Khai báo biến ki u tham chiế đ trỏ đến đối tượng
className ObjectName;
ụ : NhanVien nv;
Khai báo biếnnv có ki u lớp NhanVien, thực ra không c p phát bộ nhớ đủ chứa đối
tượng ki u lớp NhanVien, mà chỉ tạo ra tham chiế đ trỏ đến đối tượng. Sau câu lệnh
này, biến nv xu t hiện trên bộ nhớ chứa giá trị null chỉ ra rằng n chưa trỏ đến một đối
tượng thực tế nào
Sa đ
đ thực sự tạo ra một đối tượng và gán địa chỉ của đối tượng cho biến
này, dùng toán tử new
ObjectName = new ClassName();
Ví dụ: nv = new NhanVien();
Có th kết hợp cả hai bước trên vào một câu lệnh :
ClassName ObjectName = newClassName();
ụ NhanVien nv = new NhanVien();
3.2.3. Thuộc tính của lớp
Vùng dữ liệu (fields) hay thuộc tính (properties) của lớp
được khai báo bên trong lớp như a :
class <ClassName>
{
// khai báo những thuộc tính của lớp
<ti n tố> <ki u dữ liệu> field1;
// …
}
Đ xác định quy n truy xu t của các đối tượng khác đối với vùng dữ liệu của lớp
người ta thường dùng 3 ti n tố sau:
public: có th truy xu t từ t t cả các đối tượng khác
private: một lớp không th truy xu t vùng private của 1 lớp khác.
protected: vùng protected của 1 lớp chỉ cho phép bản thân lớp đ và những lớp
d n xu t từ lớp đ tr
cập đến.
106
Ví dụ:
public class xemay{
public String nhasx;
public String model;
private float chiphisx;
protected int thoigiansx;
// so luong so cua xe may: 3, 4 so
protected int so;
// sobanhxe là biến tĩnh c giá trị là 2 trong t t cả
// các th hiện tạo ra từ lớp xemay
public static int sobanhxe = 2;
}
Thuộc tính “nha x” “mo el”c th được truy cập đến từ t t cả các đối tượng khác.
Thuộc tính “chiphi x” chỉ có th truy cập được từ các đối tượng có ki
Thuộc tính “thoigian x” o c th truy cập được từ các đối tượng có ki
“xema ”
“xema ”
và các đối tượng của các lớp con d n xu t từ lớp “xema ”
ư ý: hông thường đ an toàn cho vùng dữ liệu của các đối tượng người ta tránh
dùng ti n tố p blic mà thường chọn ti n tố private đ ngăn cản quy n truy cập đến vùng
dữ liệu của một lớp từ các phương thức bên ngoài lớp đ .
3.2.4. Cách truy xuất thành phần của lớp
a. iến khai báo trong định ngh a lớp
- Biến đối tượng (In tance Variable ha Ob ect Variable): chỉ th ộc tính đối tượng
khi tr
x t phải khởi tạo đối tượng
Cách khai báo biến đối tượng:
TypeInstanceVar;
Cách tr
cập biến đối tượng:
ObjectName.InstanceVar
Ví dụ: NhanVien nv = new NhanVien();
System.out.println(nv.hoTen);//không th truy cập biến hoTen, do khai báo private
107
- Biến lớp (Cla
một l n cùng với lớp
Variable) : v bản ch t là biến toàn cục là biến tĩnh được tạo lập
ùng ch ng cho mọi đối tượng th ộc lớp khi tr
x t không c n
khởi tạo đối tượng đ trao đổi thông tin của các đối tượng cùng lớp
Cách khai báo biến lớp :
static TypeClassVar;
Cách tr
cập biến lớp :
ClassName.ClassVar
Ví dụ: System.out.println(NhanVien.luongCB);
- Biến cục bộ ( ocal Variable): ngoài biến lớp, biến đối tượng là biến thành viên
của lớp, còn có biến cục bộ được khai báo và t n tại trong phạm vi hàm. Biến cục bộ bắt
b ộc phải khởi tạo giá trị trước khi ử ụng.
b. Hàm khai báo trong định ngh a lớp gồm có hai loại
- Hàm đối tượng (Ob ect
Cách tr
etho ):
x t hàm đối tượng như biến đối tượng
ObjectName.ObjectMethod(Parameter-List)
- Hàm lớp (Cla
etho ): ùng ch ng cho mọi đối tượng thuộc lớp khi tr
không c n khởi tạo đối tượng. Khai báo hàm lớp thêm từ khoá tatic.
Cách tr
x t hàm lớp :
ClassName.ClassMethod(Parameter-List)
í ụ
class NhanVien {
private String hoTen;
//Biến đối tượng
private int namSinh;
private float heSoLuong;
static int luongCB;
//Biến lớp
float luong() {
//Hàm đối tượng
float l = luongCB * heSoLuong;//Biến cục bộ
return l;
}
108
x t
public static void main(String args[]){
NhanVien.luongCB = 290;
Nhanvien nv=new Nhanvien();
System.out.println(nv.luong()) ;
}
}
Ví dụ: Các hằng hàm ch ẩn toán học của lớp
ath trong g i ava.lang là hằng
hàm lớp nên khi gọi không c n phải khởi tạo đối tượng.
ụng h ng, hàm
ngh a
Số
Math.E
Số Pi
Math.PI
rị t ệt đối của ố x
Math.abs(x)
x c th là ố ng ên ha thực
Math.toRadians(x) Đổi g c x tính bằng độ ang g c
radian
Cos x
Math.cos(x)
x tính bằng ra ian
Sin x
Math.sin(x)
Ex
Math.exp(x)
Ln x
Math.log(x)
Số ng nhiên
và
Math.random()
Cho ố ng ên g n nh t với ố x
Math.round(x)
Cho x với x là ố thực
Math.pow(x,y)
hai căn của ố x
Math.sqrt(x)
Kiểu giá trị trả về
Cùng ki
với x
Số thực
Số thực
Số thực
Số thực
Số thực
Số thực
Số ng ên
Số thực
Số thực
ụ : double s = Math.pow(r,2)*Math.PI;
3.3. Hàm
3.3.1. Cách khai báo hàm và phạm vi truy xuất
Hàm ha phương thức (method) trong Java là khối lệnh thực hiện các chức năng
các hành vi xử lý của lớp lên vùng dữ liệu.
hai báo phương thức:
<Ti n tố>
ên phương thức (
109
anh ách đối số>)
{
<khối lệnh>;
}
Đ xác định quy n truy xu t của các đối tượng khác đối với các phương thức của
lớp người ta thường dùng các ti n tố a : p blic: phương thức có th truy cập được từ bên
ngoài lớp khai báo.
protected: có th truy cập được từ lớp khai báo và những lớp d n xu t từ nó.
private: chỉ được truy cập bên trong bản thân lớp khai báo.
static: phương thức lớp dùng chung cho t t cả các th hiện của lớp c nghĩa là
phương thức đ c th được thực hiện k cả khi không c đối tượng của lớp chứa phương
thức đ .
final: phương thức có ti n tố nà không được khai báo ch ng ớ các lớp d n xu t.
abstract: phương thức không c n cài đặt (không có ph n source code), sẽ được
hiện thực trong các lớp d n xu t từ lớp này.
synchoronized: ùng đ ngăn các tác động của các đối tượng khác lên đối tượng
đang x t trong khi đang đ ng bộ hóa. Dùng trong lập trình miltithreads.
<ki u trả v >: có th là ki u void, ki
ên phương thức : đặt theo
cơ ở hay một lớp.
i ước giống tên biến.
<danh sách thông số>: có th r ng
ư ý:
hông thường trong một lớp các phương thức nên được khai báo dùng từ khóa
public, khác với vùng dữ liệ thường là dùng ti n tố private vì mục đích an toàn. Những
biến nằm trong một phương thức của lớp là các biến cục bộ (local) và nên được khởia tạo
sau khi khai báo.
Ví dụ:
public class xemay{
public String nhasx;
public String model;
private float chiphisx;
110
protected int thoigiansx;
// so luong so cua xe may: 3, 4 so
protected int so;
// là biến tĩnh có giá trị là 2 trong tất cả
// các thể hiện tạo ra từ lớp xemay
public static int sobanhxe = 2;
public float tinhgiaban(){
return 1.5 * chiphisx;
}
}
3.3.2. Hàm main()
Dạng tổng
át của hàm main()
public static void main(String args[]) {
// Body ofMethod
}
- Ứng ụng độc lập của Java chỉ c một lớp c hàm main() gọi là lớp chính
(Primary Class)
- ừ khoá tatic cho ph p hàm main() được gọi khi không c n khởi tạo đối tượng.
Vì hàm main() được trình thông ịch của Java gọi trước khi b t kỳ lớp nào được khởi tạo
- ừ khoá voi cho biết hàm main() không trả v giá trị
- ừ khoá p blic chỉ ra rằng hàm nà được gọi bởi òng lệnh bên ngoài lớp
- ham đối String arg
là một mảng các ch
i ký tự chứa các tham đối òng
lệnh gọi thực hiện ứng.
3.3.3. Hàm khởi tạo (Constructor) ([1] trang 46, [2] trang 125)
Contructor thật ra là một loại phương thức đặc biệt của lớp. Constructor dùng gọi
tự động khi khởi tạo một th hiện của lớp, có th
ùng đ khởi gán những giá trị mặc
định. Các constructor không có giá trị trả v , và có th có tham số hoặc không có tham số.
Constructor phải có cùng tên với lớp và được gọi đến dùng từ khóa new.
111
Nếu một lớp không có constructor thì java sẽ cung c p cho lớp một constructor
mặc định (default constructor). Những thuộc tính, biến của lớp sẽ được khởi tạo bởi các
giá trị mặc định (số: thường là giá trị 0, ki u luận lý là giá trị false, ki
đối tượng giá trị
n ll …)
ư ý: thông thường đ an toàn, dễ ki m soát và làm chủ mã ngu n chương trình
chúng ta nên khai báo một constructor cho lớp.
Ví dụ:
public class xemay{
// …
public xemay(){}
public xemay(String s_nhasx, String s_model, f_chiphisx, int i_thoigiansx, int i_so){
nhasx = s_nhasx;
model = s_model;
chiphisx = f_chiphisx;
thoigiansx = i_thoigiansx;
so = i_so;
// hoặc
// this.nhasx = s_nhasx;
// this.model = s_model;
// this.chiphisx = f_chiphisx;
// this.thoigiansx = i_thoigiansx;
// this.so = i_so;
}
}
Ví dụ 1:
class NhanVien {
private String hoTen;
private int namSinh;
private float heSoLuong;
112
public static int luongCB;
public NhanVien() { }
public NhanVien(String ht, int ns, float hsl) {
hoTen = ht;
namSinh = ns;
heSoLuong = hsl;
}
public float luong() {
return luongCB * heSoLuong;
}
public String getHoTen(){
return hoTen;
}
public static void main(String args[]) {
NhanVien.luongCB = 290;
NhanVien nv1 = new NhanVien();
System.out.println(“Luong cua “ + nv1.getHoTen() + “ la “+nv1.luong())
;
Nhan ien nv2 = new Nhan ien(“A”,1980,1.96F);
System.out.println((“Luong cua “+nv2.getHoTen() + “ la “+nv2.luong())
;
}
}
Ví dụ2:Viết lại sử dụng biến lớp và hàm lớp
class NhanVien{
//Các biến thành viên và hàm như v
ụ 1, và bổ sung:
static float tongLuong;
static void tinhTong(NhanVien nv){
tongLuong = tongLuong + nv.luong();
113
}
}
class DSNhanVien {
public static void main(String[] args){
NhanVien.luongCB=290;
NhanVien.tongLuong = 0;
final int n = 5;
NhanVien[] nv = new NhanVien[n];
BufferedReader kbd = new BufferedReader(new
InputStreamReader(System.in));
for (int i=0;i
System.out.print(“nhap ho ten ”);
String ht=kbd.readLine();
System.out.print(“nhap nam sinh ”);
int ns=Integer.parseInt(kbd.readLine());
System.out.print(“nhap he so luong ”);
float hsl=Float.parseFloat(kbd.readLine());
nv[i] = new NhanVien(ht, ns, hsl);
NhanVien.tinhTong(nv[i]);
}
System.out.println(“Tong luong la “+Nhan ien.tongLuong);
}
}
3.3.4. Hàm hủy ([1] trang 55)
Trong java không có ki u dữ liệu con trỏ như trong C người lập trình không c n
phải quá bận tâm v việc c p phát và giải phóng vùng nhớ, sẽ có một trình dọn dẹp hệ
thống đảm trách việc này. Trình dọn dẹp hệ thống sẽ dọn dẹp vùng nhớ c p phát cho các
đối tượng trước khi hủy một đối tượng.
114
Phương thức finalize() là một phương thức đặc biệt được cài đặt sẵn cho các lớp.
Trình dọn dẹp hệ thống sẽ gọi phương thức nà trước khi hủy một đối tượng. Vì vậy việc
cài đặt một số thao tác giải phóng, dọn dẹp vùng nhớ đã c p phát cho các đối tượng dữ
liệ trong phương thức finalize() sẽ giúp cho người lập trình chủ động ki m soát tốt quá
trình hủ đối tượng thay vị giao cho trình dọn dẹp hệ thống tự động. Đ ng thời việc cài
đặt trong phương thức finalize() sẽ giúp cho bộ nhớ được giải phóng tốt hơn g p ph n cải
tiến tốc độ chương trình.
Ví dụ:
class A{
// Khai báo các thuộc tính
public void method_1(){
// …
}
protected void finalize(){
// Có thể ùng để đóng tất cả các kết nối
// vào cơ sở dữ liệu trước khi hủy đối tượng.
// …
}
}
3.3.5. Từ khóa this ([2] trang 131)
Biến this là một biến ẩn t n tại trong t t cả các lớp trong ngôn ngữ java. Một class
trong Java luôn t n tại một biến this, biến this được sử dụng trong khi chạy và tham khảo
đến bản thân lớp chứa nó.
Từ khoá thi
ùng đ chỉ đến đối tượng hiện hành. Bình thường, khi các hàm truy
xu tbiến thành viên hay hàm ngay trong lớp của nó, chỉ c n ghi tên của biến thành viên
hay hàm mà không c n chỉ r tên đối tượng hay lớp, java tự hi u là biến hay hàm của lớp
hiện hành. Tuy nhiên sử dụng từ khoá thi đ truy xu t hàm hay biến thành viên ngay
trong lớp của nó là c n thiết trong một số trường hợp ha làm cho chương trình r ràng
dễ đọc hơn.
115
this.Var
this.Method(Parameter-List)
Chẳng hạn như khi biến cục bộ ha tham đối truy n cho hàm được đặt tên trùng
với biến thành viên của lớp n
ẽ che kh t biến thành viên trong thân hàm khi đ ta ử
dụng từ khoá thi đ truy xu t biến thành viên.
Ví dụ:
<tiền tố> class A{
<tiền tố> int <field_1>;
<tiền tố> String <field_2>;
// Contructor của lớp A
public A(int par_1, String par_2){
this.field_1 = par_1;
this.field_2 = par_2;
}
<tiền tố> <kiểu trả về> <method_1>(){
// …
}
<tiền tố> <kiểu trả về> <method_2>(){
this.method_1()
// …
}
}
í ụ 1:
class NhanVien {
private String hoTen;
private int namSinh;
private float heSoLuong;
NhanVien(String hoTen, int namSinh, float heSoLuong) {
this.hoTen = hoTen;
116
this.namSinh = namSinh;
this.heSoLuong = heSoLuong;
}
}
í ụ2
class ViDu {
private int a;
public void hienThi() {
int a = 5;
System.out.println(a);
}
public ViDu(int a) {
this.a = a;
}
public static void main(String args[]) {
ViDu v = new ViDu(2);
v.hienThi();
}
}
3.3.6. Khai báo chồng phương thức (Overloa ing metho ) ([2] trang 121)
Java cho ph p bạn định nghĩa nhi
hàm hoặc phương thức trùng tên trong cùng
một lớp nhưng khác tham ố (khác ki u dữ liệu, khác số lượng tham số) Java xem đâ là
các hàm khác nha . hả năng như vậ gọi là nạp ch ng hàm.
Hàm khởi tạo cũng c th được nạp ch ng như hàm bình thường nghĩa là ta được
ph p định nghĩa nhi
hàm khởi tạo khác nha v số lượng ha ki
Ví dụ:
public class xemay{
// khai báo fiel s …
public float tinhgiaban(){
117
tham đối.