Tải bản đầy đủ (.pdf) (63 trang)

Lap Trinh java bai giang chuong 3

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (665.83 KB, 63 trang )

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

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;iSystem.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.



×