1. Trang chủ
  2. » Công Nghệ Thông Tin

giáo trình lập trình hướng đối tượng nghề tin học ứng dụng cao đẳng

78 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 78
Dung lượng 726,47 KB

Nội dung

Sử dụng lÁp trình h°ớng đái t°ợng trong Java, thiết kế các lớp để thực hián các chāc năng sau: 1.. Một tham chiếu trong Java là một biến chāa địa chỉ bộ nhớ cÿa một đái t°ợng, trong khi

Trang 1

U þ BAN NHÂN DÂN THÀNH PHà Hâ CHÍ MINH

TR¯âNG CAO ĐÀNG BÁCH KHOA NAM SÀI GÒN

GIÁO TRÌNH MÔN H àC/MÔ ĐUN: LÀP TRÌNH H¯àNG ĐÞI T¯þNG

NGÀNH/ NGH Þ: TIN HàC ĀNG DþNG TRÌNH ĐÞ: CAO ĐÀNG

Ban hành kèm theo Quyết định số: 459/QĐ-NSG ngày 31 tháng 8 năm2022

c ủa Hiệu tr°ởng Tr°ờng Cao Đẳng Bách Khoa Nam Sài Gòn

Tp.H ồ Chí Minh, năm 2022

Trang 2

Tài liáu này thuộc lo¿i sách giáo trình nên các nguãn thông tin có thể đ°ợc phép dùng nguyên bÁn hoặc trích dùng cho các mục đích về đào t¿o và tham khÁo

Mọi mục đích khác mang tính lách l¿c hoặc sử dụng với mục đích kinh doanh thiếu lành m¿nh sẽ bị nghiêm cấm

Trang 3

LÁp trình h°ớng đái t°ợng là mộn học thuộc khái kiến thāc chuyên ngành dành cho đái t°ợng học sinh – sinh viên ngành/ nghề Tin học āng dụng Nhằm phục vụ cho viác giÁng d¿y và học tÁp môn lÁp trình h°¡ng đái t°ợng, nhóm tác giÁ chúng tôi biên so¿n giáo trình này dựa trên khung ch°¡ng trình chung môn tin học cÿa Bộ Lao động Th°¡ng binh và Xã hội Nội dung giáo trình gãm 9 bài:

- Bài 1: M« đ

- Bài 2: các khái niám về lÁp trình h°ớng đái t°ợng

- Bài 3: Lớp và đái t°ợng trong Java

- Bài 4: Thừa kế

- Bài 5: Đa hình

- Bài 6: LÁp trình tổng quát

- Bài 7: Cấu trúc dữ liáu

- Bài 8: Luãng dữ liáu

- Bài 9: Thiết kế h°ớng đái t°ợng

Trong quá trình biên so¿n chúng tôi đã kết hợp kinh nghiám giÁng d¿y trong nhiều năm cÿa nhóm tác giÁ với mong muán có thể giúp cho học sinh – sinh viên dß dàng nắm bắt đ°ợc nội dung cÿa môn học Mặc dù, rất cá gắng trong quá trình biên so¿n, nh°ng chắc chắn không

thể tránh khßi những thiếu sót, vì vÁy, nhóm tác giÁ chúng tôi rất mong nhÁn đ°ợc ý kiến đóng góp cÿa b¿n đọc để giáo trình ngày một hoàn thián h¡n

Tp.Hã Chí Minh, ngày 31 tháng 8 năm 2022

Tham gia biên so¿n

1 Chÿ biên: ThS Lê Thị Thùy Trang

2 &&&&

3 &&&&

Trang 4

M þC LþC

Bài 1: M« đ

1.1.Lịch sử ngôn ngữ Java 7

1.2 Môi tr°£ng lÁp trình Java, máy Áo, và JDK 7

1.3 Giới thiáu về các lo¿i ch°¡ng trình Java: application và applet 8

1.4 Dịch và ch¿y ch°¡ng trình 9

Bài 2: Các khái niám về lÁp trình h°ớng đái t°ợng 12

2.1 Lịch sử ngôn ngữ lÁp trình 12

2.2 So sánh lÁp trình thÿ tục và lÁp trình h°ớng đái t°ợng 13

2.3 Khái niám h°ớng đái t°ợng và mục tiêu cÿa thiết kế h°ớng đái t°ợng 15

2.4 S¡ l°ợc về các khái niám c¡ bÁn: trừu t°ợng hóa, đái t°ợng, lớp, thông điáp, đóng gói, che dấu thông tin, thừa kế 16

BÀI TÀP 17

Bài 3: Lớp và đái t°ợng trong Java 20

3.1 Vị trí cÿa đái t°ợng trong ch°¡ng trình 20

3.2 Cài đặt và sử dụng lớp và đái t°ợng 20

3.3 Đái t°ợng và tham chiếu đái t°ợng 22

3.4 Thể hián cÿa khái niám đóng gói và che dấu thông tin trong cài đặt lớp 24

3.5 Phân biát các kiểu dữ liáu c¡ bÁn và đái t°ợng 25

3.6 BÁn chất cÿa đái t°ợng và tham chiếu đái t°ợng 28

3.7 C¡ chế phgp gán và các phgp so sánh 28

3.8 C¡ chế truyền tham sá và giá trị trÁ về 29

3.9 Tham chiếu this 31

3.10 Các đặc điểm đặc thw ngôn ngữ nh° thành viên static, package, tham sá dong lánh 31

3.11 Quan há composition giữa các đái t°ợng 33

BÀI TÀP 33

Bài 4: Thừa kế 36

4.1 Khái niám kế thừa 36

4.2 Cài đặt quan há thừa kế trong Java 37

4.4 Thành viên final, constructor 39

4.5 Tái sử dụng bằng quan há thừa kế, so sánh với composition 40

BÀI TÀP 41

Bài 5: Đa hình 44

Trang 5

5.1 Upcast và downast 44

5.2 C¡ chế liên kết động và liên kết tĩnh 45

5.3 Lớp trừu t°ợng và ph°¡ng thāc trừu t°ợng 46

5.4 Đa thừa kế và interface 48

5.5 M¿u thiết kế: Prototype và Template Method 49

BÀI TÀP 51

Bài 6: LÁp trình tổng quát 53

6.1 Lớp tổng quát 53

6.2 Ph°¡ng thāc tổng quát 54

6.3 Kiểu con và wildcard 55

6.4 H¿n chế và ràng buộc tham sá kiểu 56

6.5 Quan há giữa lớp tổng quát và thừa kế 57

BÀI TÀP 58

Bài 7: Cấu trúc dữ liáu 60

7.1 Cấu trúc dữ liáu c¡ bÁn 60

7.2 Các lớp wrapper t°¡ng āng string, 61

7.3 StringBuffer, Math, Array 62

7.4 Các kiểu dữ liáu container tổng quát (list, set&) 63

BÀI TÀP 64

Bài 8: Luãng dữ liáu 67

8.1 Khái niám về luãng dữ liáu 67

8.2 C¡ chế tổng quát lắp ráp các luãng dữ liáu khi đọc/ghi 67

8.3 Các luãng c¡ bÁn để xử lý file 68

8.4 Áp dụng c¡ chế chung cho các thao tác đọc ghi với các lo¿i nguãn dữ liáu khác 69

BÀI TÀP 70

Bài 9: Thiết kế h°ớng đái t°ợng 72

9.1 Giới thiáu các nguyên tắc xây dựng thiết kế h°ớng đái t°ợng tát 72

9.2 Giới thiáu s¡ l°ợc về m¿u thiết kế 73

BÀI TÀP 74

TÀI LIàU THAM KHÀO 78

Trang 6

- Phát biểu đ°ợc các nguyên lý c¡ bÁn cÿa thiết kế h°ớng đái t°ợng

- Cài đặt đ°ợc các lớp và ph°¡ng thāc bÁn chất cÿa đái t°ợng, tham chiếu đến đái t°ợng

- Trình bày và phân biát đ°ợc các quan niám cây kế thừa, đa hình

- Trình bày và phân biát đ°ợc các khái niám căn bÁn về lÁp trình tổng quát, cấu trúc dữ liáu tổng quát

2 Về kỹ năng:

- GiÁi quyết và đ°a ra giÁi pháp lÁp trình h°ớng đái t°ợng cho các bài toán « quy mô nhß

- Trình bày đ°ợc s¡ đã lớp bằng ngôn ngữ đặc tÁ UML với cú pháp c¡ bÁn

- Cài đặt thiết kế h°ớng đái t°ợng cho tr°ớc bằng ngôn ngữ Java

Trang 7

NÞI DUNG MÔN HàC Bài 1: Mở đầu

Mÿc tiêu:

Học xong ch°¡ng này, ng°£i học có khÁ năng:

- Tìm hiểu lịch sử ngôn ngữ java

- Cài đặt môi tr°£ng java

- Biên dịch và ch¿y ch°¡ng trình java

Nßi dung:

1.1 Lßch sư뀉 ngôn ngư뀃 Java

Java là một trong những ngôn ngữ lÁp trình h°ớng đái t°ợng Nó đ°ợc sử dụng trong phát triển ph

1.2 Môi tr°ãng l⌀p trknh Java, mcy ko, và JDK

Để đÁm bÁo tính đa nền, Java sử dụng c¡ chế Máy Áo cÿa Java

ByteCode là ngôn ngữ máy cÿa Máy Áo Java t°¡ng tự nh° các lánh nhị phân cÿa các máy tính thực

Một ch°¡ng trình sau khi đ°ợc viết bằng ngôn ngữ Java (có phđ°ợc biên dịch thành tÁp tin thực thi đ°ợc trên máy Áo Java (có phtin thực thi này chāa các chỉ thị d°ới d¿ng mã Bytecode mà máy Áo Java hiểu đ°ợc phÁi làm

Trang 8

Khi thực hián một ch°¡ng trình, máy Áo Java lBytecode thành các chỉ thị d¿ng nhị phân cÿa máy tính thực và thực thi thực sự chúng trên máy tính thực (con gọi là khÁ năng khÁ chuyển)

Máy Áo thực tế đó là một ch°¡ng trình thông dịch Vì thế các há điều hành khác nhau sẽ

có các máy Áo khác nhau Để thực thi một āng dụng cÿa Java trên một há điều hành cụ thể, c

JVM cung cấp môi tr°£ng thực thi cho ch°¡ng trình Java (con gọi là khÁ năng độc lÁp với nền)

Có nhiều JVM cho các nền tÁng khác nhau chẳng h¿n nh°: Windows, Liux, và Mac

1.3 Giái thißu vë ccc loci ch°¡ng trknh Java: application và applet

Các ch°¡ng trình xây dựng bằng Java đ°ợc chia làm 2 lo¿i là Java Applet và Java Application

Java Application là gì?

Ngôn ngữ Java có cú pháp khá giáng với ngôn ngữ C/C++, nh°ng nó có thể đáp āng khÁ năng độc lÁp với há điều hành Nền tÁng cÿa ngôn ngữ lÁp trình Java là các class, nó đóng vai tro nh° những đái t°ợng Ng°£i lÁp trình khi xây dựng các āng dụng sẽ sử dụng 1 sá class chuऀn cÿa há tháng, hoặc cũng có thể tự mình xây dựng class khác nhằm đáp āng yêu ccông viác

Hián nay Java đ°ợc āng dụng rất rộng rãi cho các āng dụng đ°ợc viết trên Internet, lấy m¿ng làm trung tâm và có thể đ°ợc dwng nh° một nền tÁng Đây là 1 lo¿i ngôn ngữ lÁp trình nhanh, bÁo mÁt, đáng tin cÁy, đ°ợc dwng để viết mã cho các āng dụng di động, phmềm doanh nghiáp hay các āng dụng dữ liáu lớn và công nghá phía máy chÿ

Java Application (viết tắt Java App) là những āng dụng độc lÁp, t°¡ng tự nh° các ch°¡ng trình có đuôi COM hay đuôi EXE thông th°£ng Viác thực hián Java Application đ¡n giÁn h¡n Java Applet b«i chúng không c

Applet là gì?

Ngôn ngữ lÁp trình Java hián nay đ°ợc sử dụng khá phổ biến trên nhiều há điều hành khác nhau « khắp n¡i trên thế giới Chính vì vÁy, ngôn ngữ lÁp trình Java cũng đ°ợc sử dụng

để t¿o ra nhiều lo¿i āng dụng đa d¿ng

Trong đó, Applet là những lo¿i āng dụng nhß đ°ợc xây dựng b«i ngôn ngữ lÁp trình Java hoặc ngôn ngữ lÁp trình khác đ°ợc biên dịch sang mã bytecode cÿa ngôn ngữ Java Tuy nhiên, khi đ°a đến ng°£i dwng, Applet sẽ xuất hián hoàn toàn với d¿ng Java bytecode

Trang 9

Những phiên bÁn Applet đho¿t động điều chỉnh, các applet cÿa Java đã đ°ợc lo¿i bß hoàn toàn vào 2017

S« hữu khÁ năng linh ho¿t trên đa nền tÁng, Applet có thể sử dụng trên nhiều há điều hành khác nhau nh° Microsoft Windows, Linux, MacOS, FreeBSD, Unix, v.v

1.4 D ßch và chcy ch°¡ng trknh

Ch¿y ch°¡ng trình bằng các lánh trong Command Prompt với JDK đã cài đặt Đtiên, thay đổi folder đang thực thi trong Command Prompt đến th° mục chāa file code Java

C:\Users\LHVINH>E: E:\>cd Demo

Sau đó, sử dụng ch°¡ng trình javac trong JDK để biên dịch code Java thành bytecode Một file tên là Welcome.class chāa bytecode sẽ đ°ợc tự động t¿o ra

- Trình so¿n thÁo mã nguãn (source code editor): dwng để viết code

- Trình biên dịch (compiler), trình thông dịch (interpreter)

- Công cụ xây dựng tự động: khi sử dụng sẽ biên dịch (hoặc thông dịch) mã nguãn, thực hián liên kết các th° vián và có thể ch¿y ch°¡ng trình một cách tự động

- Trình gỡ lỗi (debugger): hỗ trợ tìm lỗi code

Các Java IDE th°£ng dwng là NetBeans, Eclipse, IntelliJ IDEA,&

NetBeans IDE:

Tạo một Java Project

Tr°ớc khi t¿o một ch°¡ng trình Java trong NetBeans, c

Chọn File –> New Project, hộp tho¿i New Project xuất hián

Trang 10

Chọn Java trong Categories và Java Application trong Projects và click Next để hiển thị hộp tho¿i New Java Application

NhÁp tên (ví dụ: Hello World) trong mục Project Name và E:\ trong mục Project Location Click Finish để t¿o project

Tạo một Java Class

Right click vào Hello World trong Project Pane để hiển thị context menu Chọn New –> Java Class để hiển thị hộp tho¿i New Java Class

Trang 11

NhÁp HelloWorld trong mục Class Name và chọn Source Packages trong mục Location Để tráng mục Package, sẽ t¿o một lớp trong default package Click Finish để t¿o HelloWorld class

Bên d°ới, tÁp tin HelloWorld.java đ°ợc đặt trong <package Vidu1> So¿n thÁo code trong HelloWorld class

Để ch¿y Welcome.java, right click Welcome.java để hiển thị context menu và chọn Run File hoặc nhấn Shift + F6

Trang 12

Bài 2: C cc khci nißm vë l⌀p trknh h°áng đ÷i t°£ng

Mÿc tiêu:

Học xong ch°¡ng này, ng°£i học có khÁ năng:

- Phân biát lÁp trình h°ớng thÿ tục và h°ớng đái t°ợng

Nßi dÿng:

2.1 L ßch sư뀉 ngôn ngư뀃 l⌀p trknh

Ch°¡ng trình máy tính đtoán học Ý Luigi Menabrea về cỗ máy mới nhất đ°ợc đề xuất cÿa Charles Babbage: Máy phân tích; bà đã bổ sung vào cuán hãi ký những ghi chú chỉ ra chi tiết ph°¡ng pháp tính toán

sá Bernoulli bằng cỗ máy đó, đ°ợc htính đ

Máy tính đián tử đđ°ợc t¿o Do giới h¿n về học tác độ và bộ nhớ nên các lÁp trình viên phÁi viết các mã tay các ch°¡ng trình hợp ngữ

ĐCode, ngôn ngữ lÁp trình bÁc cao đ

là đúng với phát minh cÿa Electron.js

1972 – C: Dennis Ritchie và Ken Thompson quyết định t¿o ra C ngôn ngữ có những dấu ngoặc nhọn {} và nó là một thành công lớn Sau đó ông bổ sung thêm secmentation faults

và các tính năng thân thián với các lÁp trình viên để tăng hiáu xuất

Ông và b¿n bg cÿa mình t¿i Bell Labs cũng làm một ch°¡ng trình demo cho C, kết quÁ

họ đã t¿o ra một há điều hành gọi là Unix

1972 - Prolog, ngôn ngữ logic đthiết kế b«i Colmerauer, Roussel, và Kowalsk

Trang 13

1978 – SQL: SQL, ngôn ngữ truy v¿n có cấu trúc, đ°ợc t¿o b«i Donald D Chamberlin

và Raymond F Boyce « IBM

1983 - C++: Bjarne Stroustrup bổ sung thêm nhiều tính năng nâng cao mà ông có thể nghĩ ra cho C và đặt cho ngôn ngữ lÁp trình này là C++

1986 - Objective-C: Brac Box và Tol Move quyết định t¿o thêm một phiên bÁn C dựa trên Smalltalk, cái đ°ợc gọi là Objective-C

1987 – Perl: Larry Wall với kinh nghiám tôn giáo, tr« thành một nhà thuyết giÁng và làm cho Perl tr« thành một học thuyết

1991 – Python: Guido van Rossum phát minh ra Python, cú pháp đ°ợc chọn lấy cÁm hāng từ Monty Python và Flying Circus

1991 – Visual Basic: Đ°ợc t¿o ra b«i Microsoft, bÁn release cuái cwng là version 6 vào năm 1998, window 10 v¿n duy trì khÁ năng t°¡ng thích với các āng dụng Visual Basic 6

1995 – JavaScipt: Brendan Eich sử dụng những ngày cuái tungữ sẽ đ°ợc sử dụng rộng rãi trên mọi trình duyát và cuái cwng là Skynet Ban đviác t¿i Netscape ông gọi nó là LiveScript nh°ng Java tr« thành một một ngôn ngữ lÁp trình phổ biến vì thế họ đã quyết định đổi tên nó thành JavaScipt

Java tr« thành một th°¡ng hiáu và điều này đem đến rắc rái cho họ, JavaScript sau đó đ°ợc đổi tên thành ECMAScript nh°ng mọi ng°£i v¿n gọi nó là JavaScript

1996 – Java: James Gosling phát minh Java, ngôn ngữ đt°ợng n¡i các quy tắc design patterns đ°ợc chú ý h¡n chÿ nghĩa thực dụng

2001 - C#: [Anders Hejlsberg] viết l¿i Java và gọi nó là C# b«i vì lÁp trình trong C tuyát h¡n Java Mọi ng°£i thích phiên bÁn Java mới này vì nó hoàn toàn không giáng Java

2.2 So s cnh l⌀p trknh thÿ tÿc và l⌀p trknh h°áng đ÷i t°£ng

¯u điểm của các kiểu lập trình

POP (Lập trình hướng thủ tục)

- Cung cấp khÁ năng tái sử dụng cwng một mã t¿i nhiều n¡i khác nhau

- T¿o điều kián trong viác theo dõi dong ch°¡ng trình

- Có khÁ năng xây dựng các mô-đun

OOP (L⌀p trknh h°áng đ÷i t°£ng)

- Các đái t°ợng giúp phân vwng nhiám vụ trong dự án

- Ch°¡ng trình an toàn có thể đ°ợc xây dựng bằng cách ऀn dữ liáu

- Nó có khÁ năng lÁp biểu đã cho các đái t°ợng

Trang 14

- Cho phgp phân lo¿i các đái t°ợng thành các lớp khác nhau

- Há tháng h°ớng đái t°ợng có thể đ°ợc nâng cấp dß dàng

- Mã dự phong có thể đ°ợc lo¿i bß bằng cách sử dụng kế thừa

- Mã có thể đ°ợc m« rộng bằng cách sử dụng l¿i

- Mô-đun lớn h¡n có thể đ¿t đ°ợc

- Trừu t°ợng dữ liáu làm tăng độ tin cÁy

- Linh ho¿t do các khái niám ràng buộc năng động

thông tin

Sự khác biệt chính giữa OOP và POP:

- POP là lÁp trình h°ớng thÿ tục trong khi OOP là lÁp trình h°ớng đái t°ợng

- Trọng tâm chính cÿa POP là về cách thāc thực hián nhiám vụ cÿa há tháng, nó tuân theo biểu đã dong chÁy để hoàn thành nhiám vụ Trọng tâm chính cÿa OOP là bÁo mÁt

dữ liáu vì chỉ các đái t°ợng cÿa một lớp mới đ°ợc phgp truy cÁp các thuộc tính hoặc chāc năng cÿa một lớp

- Các chāc năng là các đ¡n vị nhß cÿa các ch°¡ng trình lớn hoặc một ch°¡ng trình con thực thi để hoàn thành nhiám vụ chính Ng°ợc l¿i, các thuộc tính và hàm OOP cÿa lớp đ°ợc chia cho các đái t°ợng

- Trong POP, không có chế độ truy cÁp cụ thể để truy cÁp các thuộc tính hoặc chāc năng trong ch°¡ng trình Ng°ợc l¿i, trong OOP có ba chế độ truy cÁp, "public", "private",

"protected" đ°ợc sử dụng nh° một ph°¡ng thāc truy cÁp để truy cÁp các thuộc tính hoặc chāc năng

- POP không hỗ trợ khái niám Overloading/polymorphism Ng°ợc l¿i, OOP hỗ trợ Quá tÁi / Đa hình, nghĩa là sử dụng cwng tên hàm để thực hián các chāc năng khác nhau Chúng ta có thể Overload các hàm, hàm t¿o và toán tử trong OOP

- Không có khái niám thừa kế trong POP trong khi đó, OOP hỗ trợ kế thừa cho phgp sử dụng thuộc tính và chāc năng cÿa lớp khác bằng cách kế thừa nó

- POP kgm an toàn h¡n so với OOP vì trong OOP, bộ chỉ định truy cÁp giới h¿n quyền truy cÁp vào các thuộc tính hoặc chāc năng làm tăng tính bÁo mÁt

- Trong POP nếu một sá dữ liáu đ°ợc chia sẻ giữa tất cÁ các chāc năng trong ch°¡ng trình, nó đ°ợc khai báo trên toàn há tháng bên ngoài tất cÁ các chāc năng Trong khi

Trang 15

trong OOP, data-member cÿa lớp có thể đ°ợc truy cÁp thông qua các member-function cÿa lớp

- Không có khái niám về các lớp Áo trong POP trong khi trong OOP, các hàm Áo hỗ trợ

đa hình

2.3 Kh ci nißm h°áng đ÷i t°£ng và mÿc tiêu cÿa thiët kë h°áng đ÷i t°£ng

LÁp trình h°ớng đái t°ợng (OOP) là một kỹ thuÁt lÁp trình cho phgp lÁp trình viên t¿o

ra các đái t°ợng trong code trừu t°ợng hóa các đái t°ợng

Đối t°ợng:

Một đái t°ợng bao gãm 2 thông tin: thuộc tính và ph°¡ng thāc

- Thuộc tính chính là những thông tin, đặc điểm cÿa đái t°ợng Ví dụ: con ng°£i có các đặc tính nh° mắt, mũi, tay, chân&

- Ph°¡ng thāc là những thao tác, hành động mà đái t°ợng đó có thể thực hián Ví dụ: một ng°£i sẽ có thể thực hián hành động nói, đi, ăn, uáng,

Lớp:

Một lớp là một kiểu dữ liáu bao gãm các thuộc tính và các ph°¡ng thāc đ°ợc định nghĩa từ tr°ớc Đây là sự trừu t°ợng hóa cÿa đái t°ợng Khác với kiểu dữ liáu thông th°£ng, một lớp là một đ¡n vị (trừu t°ợng) bao gãm sự kết hợp giữa các ph°¡ng thāc và các thuộc tính Hiểu nôm na h¡n là các đái t°ợng có các đặc tính t°¡ng tự nhau đ°ợc gom l¿i thành một lớp đái t°ợng

Các nguyên lý c¡ bản của OOP:

- Tính đóng gói (Encapsulation)

- Tính kế thừa (Inheritance)

- Tính đa hình (Polymorphism)

- Tính trừu t°ợng (Abstraction)

Các °u điểm của lập trình h°ớng đối t°ợng:

- Dựa trên nguyên lý kế thừa, trong quá trình mô tÁ các lớp có thể lo¿i bß những ch°¡ng trình bị lặp, d° Và có thể m« rộng khÁ năng sử dụng các lớp mà không cl¿i Tái °u và tái sử dụng code hiáu quÁ

- ĐÁm bÁo rút ngắn th£i gian xây dựng há tháng và tăng năng suất thực hián

- Sự xuất hián cÿa 2 khái niám mới là lớp và đái t°ợng chính là đặc tr°ng cÿa ph°¡ng pháp lÁp trình h°ớng đái t°ợng Nó đã giÁi quyết đ°ợc các khuyết điểm cÿa ph°¡ng

Trang 16

pháp lÁp trình h°ớng cấu trúc để l¿i Ngoài ra 2 khái niám này đã giúp biểu dißn tát h¡n thế giới thực trên máy tính

2.4 S¡ l°£c vë ccc khci nißm c¡ bkn: trư뀀u t°£ng hoa, đ÷i t°£ng, láp, thông đißp, đong

g oi, che dấu thông tin, thư뀀a kë

Tính đóng gói (Encapsulation):

Các dữ liáu và ph°¡ng thāc có liên quan với nhau đ°ợc đóng gói thành các lớp để tián cho viác quÁn lý và sử dụng Tāc là mỗi lớp đ°ợc xây dựng để thực hián một nhóm chāc năng đặc tr°ng cÿa riêng lớp đó

Ngoài ra, đóng gói con để che giấu một sá thông tin và chi tiết cài đặt nội bộ để bên ngoài không thể nhìn thấy

Tính kế thừa (Inheritance):

Nó cho phgp xây dựng một lớp mới dựa trên các định nghĩa cÿa lớp đã có Có nghĩa là lớp cha có thể chia sẽ dữ liáu và ph°¡ng thāc cho các lớp con Các lớp con khßi phÁi định nghĩa l¿i, ngoài ra có thể m« rộng các thành phmới Tái sử dụng mã nguãn 1 cách tái °u, tÁn dụng đ°ợc mã nguãn Một sá lo¿i kế lo¿i kế thừa th°£ng gặp: đ¡n kế thừa, đa kế thừa, kế thừa đa cấp, kế thừa thā bÁc

Khi bắt đThông th°£ng một sá lớp có quan há với những lớp khác, chúng có những đặc tính giáng nhau

VD: 2 lớp Android, iPhone

Mỗi lớp đều đ¿i dián cho một lo¿i smartphone khác nhau nh°ng l¿i có những thuộc tính giáng nhau nh° gọi đián, nhắn tin, chụp hình Thay vì sao chgp những thuộc tính này, ta nên đặt chúng vào một lớp chung gọi là lớp cha Chúng ta có thể định nghĩa lớp cha – trong

Trang 17

Một ví dụ về đa hình trong thực tế Ta có 2 con vÁt: chó, mgo CÁ 2 con vÁt này đều là lớp động vÁt Nh°ng khi ta bÁo cÁ 2 động vÁt kêu thì con chó sẽ kêu gâu gâu, con mgo sẽ kêu meo meo

VÁy trong ví dụ chó, mgo xem nh° là các đái t°ợng 2 con vÁt có thể hiểu cwng kêu nh°ng theo các cách khác nhau à Smartphone và có những lớp con kế thừa từ nó, t¿o ra một mái quan há cha/con

Tính trừu t°ợng (Abstraction):

Trừu t°ợng có nghĩ là tổng quát hóa một cái gì đó lên, không ctrong Nó không màng đến chi tiết bên trong là gì và ng°£i ta v¿n hiểu nó mỗi khi nghe về

Ví dụ: B¿n ch¿y xe tay ga thì có hành động là tăng ga để tăng tác, thì chāc năng tăng

ga là đ¿i dián cho trừu t°ợng (abstraction) Ng°£i dwng chỉ ckhông c

Þ đây trong lÁp trình OOP, tính trừu t°ợng nghĩa là chọn ra các thuộc tính, ph°¡ng thāc cÿa đái t°ợng cnhiều thuộc tính ph°¡ng thāc, nh°ng với bài toán cụ thể không nhất thiết phÁi chọn tất cÁ

BÀI TÀP

QuÁn lý thông tin về sách trong một th° vián Sử dụng lÁp trình h°ớng đái t°ợng trong Java, thiết kế các lớp để thực hián các chāc năng sau:

1 Định nghĩa lớp Sach (Book):

- Các thuộc tính bao gãm: mã sách, tựa đề, tác giÁ, năm xuất bÁn và sá l°ợng trong kho

- Xác định các ph°¡ng thāc để truy cÁp và cÁp nhÁt thông tin cÿa sách

2 Định nghĩa lớp ThuVien (Library):

- Sử dụng một ArrayList để l°u trữ danh sách các sách trong th° vián

- Các ph°¡ng thāc bao gãm: thêm sách mới, xóa sách, tìm kiếm sách theo mã sách hoặc tựa đề, và hiển thị danh sách sách có trong th° vián

H°ớng dẫn:

1 T¿o lớp Sach (Book) với các thuộc tính và ph°¡ng thāc phù hợp nh° đã mô tÁ trong bài tÁp

2 T¿o lớp ThuVien (Library) với một ArrayList để l°u trữ danh sách các sách

- Viết ph°¡ng thāc để thêm sách mới vào danh sách

Trang 18

- Viết ph°¡ng thāc để xóa sách khßi danh sách

- Viết ph°¡ng thāc để tìm kiếm sách theo mã sách hoặc tựa đề

- Viết ph°¡ng thāc để hiển thị danh sách sách có trong th° vián

3. T¿o lớp ch°¡ng trình chính để thử nghiám các chāc năng cÿa lớp ThuVien (Library)

Tham khÁo:

import java.util.ArrayList;

class Sach {

private String maSach;

private String tuaDe;

private String tacGia;

private int namXuatBan;

private int soLuong;

public Sach(String maSach, String tuaDe, String tacGia, int namXuatBan, int soLuong) {

public String toString() {

return "Mã sách: " + maSach + ", Tựa đề: " + tuaDe + ", Tác giả: " + tacGia + ", Năm xuất bản: " + namXuatBan + ", Số

lượng: " + soLuong;

}

}

class ThuVien {

private ArrayList<Sach> danhSachSach = new ArrayList<>();

public void themSach(Sach sach) {

danhSachSach.add(sach);

}

public void xoaSach(String maSach) {

for (Sach sach : danhSachSach) {

public Sach timKiemSachTheoMa(String maSach) {

for (Sach sach : danhSachSach) {

if (sach.getMaSach().equals(maSach)) {

return sach;

}

Trang 19

}

return null;

}

public Sach timKiemSachTheoTuaDe(String tuaDe) {

for (Sach sach : danhSachSach) {

public void hienThiDanhSachSach() {

for (Sach sach : danhSachSach) {

System.out.println(sach);

}

}

}

public class Main {

public static void main(String[] args) {

ThuVien thuVien = new ThuVien();

// Hiển thị danh sách sách trong thư viện

System.out.println("Danh sách sách trong thư viện:"); thuVien.hienThiDanhSachSach();

Trang 20

Bài 3: L áp và đ÷i t°£ng trong Java

3.1 V ß trí cÿa đ÷i t°£ng trong ch°¡ng trknh

Đái t°ợng (Object) có thể là con ng°£i, đián tho¿i, máy tính, yasuo, leesin và điểm chung là đều gãm 2 thành ph

- Thuộc tính (Attribute): là những thông tin, đặc điểm cÿa đái t°ợng

- Ph°¡ng thāc (Method): là những hành động mà đái t°ợng có thể thực hián

Ví dụ: máy tính sẽ có các thuộc tính nh°: màu sắc, kích th°ớc, bộ nhớ,

Và các ph°¡ng thāc nh°: qugt virus, tắt máy, kh«i động máy, m« LoL

Khi một đái t°ợng có những đặc tính nh° nhau sẽ đ°ợc gom l¿i thành một lớp đái t°ợng (class) và cũng sẽ có 2 thành phdwng để định nghĩa một kiểu dữ liáu mới

Với ví dụ máy vi tính trên ta hiểu lớp (class) máy vi tính có:

Các thuộc tính nh°: màu sắc, kích th°ớc, bộ nhớ,

Và các ph°¡ng thāc nh°: qugt virus, tắt máy, kh«i động máy, m« LoL

Và đái t°ợng (object) có thể là các dong máy nh° Asus, Acer, Lenovo, Thinkpad, đều mang đặc tính cÿa lớp máy vi tính

3.2 C ài đặt và sư뀉 dÿng láp và đ÷i t°£ng

Lớp:

Một lớp là một nhóm đái t°ợng có các thuộc tính chung Nó là một m¿u hoặc thiết kế

từ đó các đái t°ợng đ°ợc t¿o ra

Một lớp trong java có thể chāa:

- Thành viên dữ liáu

- Constructor

- Ph°¡ng thāc

Trang 21

- Khái lánh

- Lớp và Interface

Ví dụ 1: chúng ta t¿o ra một lớp Student có hai thành viên dữ liáu id và name Chúng ta t¿o

ra các đái t°ợng cÿa lớp Student b«i từ khóa new và in giá trị cÿa các đái t°ợng

public class Student {

int id; // thành viên dữ liệu

String name; // thành viên dữ liệu

public static void main(String args[]) {

Student student1 = new Student(); // tạo một đối tượng student1

public static void main(String args[]) {

Student2 s1 = new Student2();

Student2 s2 = new Student2();

Trang 22

System.out.println(id + " " + name);

}

public static void main(String args[]) {

Student3 s1 = new Student3(111, "Viet");

Student3 s2 = new Student3(222, "Tuts");

Ví dụ: Student s1=new Student();

Lớp đ°ợc khai báo bằng viác sử dụng từ khóa class

Ví dụ: class Student{}

5 Đái t°ợng có thể đ°ợc t¿o nhiều l Lớp đ°ợc khai báo 1 l

6 Đái t°ợng đ°ợc cấp bộ nhớ khi nó đ°ợc

t¿o ra Lớp không đ°ợc cấp bộ nhớ khi nó đ°ợc t¿o ra

7 Có rất nhiều cách để t¿o ra đái t°ợng

trong java nh° từ khóa new, ph°¡ng thāc

newInstance(), ph°¡ng thāc clone(),

ph°¡ng thāc factory và deserialization

Chỉ có một cách để định nghĩa lớp trong java sử dụng từ khoá class

3.3 Đ÷i t°£ng và tham chiëu đ÷i t°£ng

Trang 23

Một tham chiếu trong Java là một biến chāa địa chỉ bộ nhớ cÿa một đái t°ợng, trong khi một đái t°ợng là một thể hián cÿa một lớp chāa dữ liáu và các ph°¡ng thāc để thao tác với dữ liáu đó

Các tham chiếu đ°ợc sử dụng để t°¡ng tác với các đái t°ợng trong Java, cho phgp thao tác các thuộc tính cÿa đái t°ợng và gọi các ph°¡ng thāc cÿa đái t°ợng Ng°ợc l¿i, các đái t°ợng là các thể hián thực tế cÿa dữ liáu và ph°¡ng thāc đ°ợc t¿o từ các định nghĩa lớp

Nhiều tham chiếu có thể trß đến cwng một đái t°ợng, cho phgp chia sẻ quyền truy cÁp

và sửa đổi dữ liáu đái t°ợng Ng°ợc l¿i, các đái t°ợng có thể đ°ợc t¿o và hÿy một cách linh ho¿t trong quá trình thực thi ch°¡ng trình Java

Sự khác biát giữa một đái t°ợng và một tham chiếu là một đái t°ợng là một thể hián cÿa một lớp và đ°ợc l°u trữ trong một khe bộ nhớ cụ thể 'Tham chiếu' trß đến n¡i l°u trữ các biến và ph°¡ng thāc cÿa 'đái t°ợng'

Một lớp là một kế ho¿ch chi tiết hoặc một m¿u cung cấp các h°ớng d¿n về cách t¿o các đái t°ợng Đái t°ợng tự căn cā vào điều này cấu trúc, điền vào các tr°£ng cm¿u lớp đó

BÁng so sánh:

Định nghĩa c¡ bÁn Nó là thể hián cÿa một lớp và

tất cÁ các thành ph

chāa đều dựa trên bÁn thiết

kế cÿa lớp

Một tham chiếu bộ nhớ đ¡n giÁn trß đến n¡i đái t°ợng đ°ợc l°u trữ trong một khe cắm bộ nhớ

Định d¿ng để t¿o Có một định d¿ng đ¡n giÁn

để t¿o một đái t°ợng:

ClassName tham chiếu_biến

= ClassName mới (có tham sá);

Tham chiếu bộ nhớ đ°ợc t¿o cwng với đái t°ợng Nó đ°ợc

sử dụng trong định d¿ng để t¿o đái t°ợng và đ°ợc đặt tên biến

Các yếu tá Nó chāa các ph°¡ng thāc và

biến dựa trên lớp

Nó chāa một chuỗi các bit l°u trữ địa chỉ cÿa đái t°ợng

Có thể thay đổi Các đái t°ợng có các tr¿ng

thái và hành vi có thể thay đổi đ°ợc, tāc là điều kián cÿa

Giá trị tham chiếu biến không thể thay đổi Nó chỉ có thể duy trì d°ới d¿ng kiểu dữ liáu mà nó đã đ°ợc khai báo

Trang 24

đái t°ợng có thể thay đổi đ°ợc

Nghĩa Áo Nó là một thực thể trong thế

Sự khác biát chính giữa Tham chiếu và Đái t°ợng trong Java:

- Một đái t°ợng là một thể hián bắt nguãn từ cấu trúc cÿa một lớp Tham chiếu là một biến trß đến vị trí cÿa đái t°ợng trong bộ nhớ

- Một đái t°ợng đ°ợc t¿o với một định d¿ng cụ thể – <Tên_biến_tham_chiếu_lớp = Tên_lớp mới(có tham sá);= Một tham chiếu đ°ợc t¿o cwng với viác t¿o đái t°ợng trong định d¿ng

3.4 Th ऀ hißn cÿa khci nißm đong goi và che dấu thông tin trong cài đặt láp

Tính đóng gói trong java là kỹ thuÁt ऀn giấu thông tin và hiển thị ra thông tin liên quan Mục đích chính cÿa đóng gói trong java là giÁm thiểu māc độ phāc t¿p phát triển phĐóng gói cũng đ°ợc sử dụng để bÁo vá tr¿ng thái bên trong cÿa một đái t°ợng Thông qua các ph°¡ng thāc set,get ta có thể thay đổi các giá trị thuộc tính và lấy giá trị từ chúng Điều này làm cho ch°¡ng trình dß quÁn lý h¡n và có thể kiểm soát dữ liáu tát h¡n

Ví dụ về tính đóng gói

public class HinhChuNhat {

private int rong; // biến intance

private int dai; // biến intance

public void setRong(int rong){

Mặc dw không thể trực tiếp thay đổi giá trị cÿa hai biến rong và dai nh°ng

có thể thông qua ph°¡ng thāc setRong , setDai để thay đổi giá trị cÿa chúng Hoặc thông qua hai ph°¡ng thāc getRong và getDai để lấy ra giá trị cÿa chúng

Trang 25

public class DemoJava {

public static void main(String[] args) {

HinhChuNhat HCN = new HinhChuNhat();

3.5 Phân bi ßt ccc kiऀu dư뀃 lißu c¡ bkn và đ÷i t°£ng

Có 8 kiểu dữ liáu nguyên thÿy (Primitive Data type) (c¡ bÁn) đó là: boolean, byte, char, short, int, long, float, double

Trang 26

Kiểu dữ liệu đối t°ợng:

- Array: là mÁng, tÁp hợp các dữ liáu có cwng một kiểu

- Class: dữ liáu này có kiểu lớp đái t°ợng đ°ợc định nghĩa b«i ng°£i dwng Bên trong

sẽ chāa tÁp hợp các thuộc tính cũng nh° ph°¡ng thāc cÿa lớp

- Interface: dữ liáu này thuộc kiểu lớp giao tiếp đ°ợc định nghĩa b«i ng°£i dwng và chāa các ph°¡ng thāc giao tiếp

- Framwork định nghĩa: Những đái t°ợng này đ°ợc t¿o sẵn và công viác cÿa chúng ta chỉ viác gọi lên và sử dụng chúng, ví dụ: File, String, Scanner

So sánh kiểu đối t°ợng và kiểu nguyên thủy:

- Trong lÁp trình kiểu dữ liáu đái t°ợng cung cấp các tính năng và khÁ năng m« rộng mà các kiểu dữ liáu nguyên thÿy không thể đáp āng đ°ợc

- Kiểu dữ liáu đái t°ợng cho phgp chúng ta định nghĩa các đái t°ợng và cấu trúc dữ liáu phāc t¿p h¡n để đáp āng nhu c

ta có thể t¿o ra các đái t°ợng phāc t¿p bao gãm các thuộc tính và ph°¡ng thāc, và các đái t°ợng này có thể t°¡ng tác với nhau để thực hián các chāc năng cụ thể Trong khi

đó khi chúng ta muán đ¿i dián cho các đái t°ợng phāc t¿p h¡n, chẳng h¿n nh° một ng°£i, một sÁn phऀm, một tài khoÁn ngân hàng, thì các kiểu dữ liáu nguyên thÿy không

đÿ để mô tÁ chúng

- Kiểu dữ liáu đái t°ợng cung cấp nhiều tính năng h¡n so với các kiểu dữ liáu nguyên thÿy Chúng cho phgp chúng ta sử dụng kế thừa để tái sử dụng code, đóng gói để giữ các thuộc tính và ph°¡ng thāc cÿa đái t°ợng đ°ợc bÁo mÁt, và đa hình để cho phgp các đái t°ợng khác nhau có thể sử dụng các ph°¡ng thāc cwng tên một cách khác nhau

- H¡n nữa, các kiểu dữ liáu đái t°ợng cũng cho phgp chúng ta t¿o ra các đái t°ợng phw hợp với nhu c

- Một điểm khác biát chính giữa kiểu dữ liáu đái t°ợng và kiểu dữ liáu nguyên thÿy là tính chất tham chiếu và tham trị cÿa chúng

- Kiểu dữ liáu nguyên thÿy đ°ợc l°u trữ trong vwng nhớ cÿa máy tính và đ°ợc truyền theo c¡ chế tham trị (pass by value) trong các hàm và ph°¡ng thāc Khi chúng ta truyền một biến kiểu dữ liáu nguyên thÿy vào một hàm hoặc ph°¡ng thāc, một bÁn sao cÿa giá trị cÿa biến đó đ°ợc t¿o ra và đ°ợc truyền vào hàm Điều này có nghĩa là giá trị cÿa biến gác không bị thay đổi khi giá trị cÿa biến đ°ợc thay đổi trong hàm

Trang 27

- Ng°ợc l¿i, kiểu dữ liáu đái t°ợng đ°ợc l°u trữ trong vwng nhớ và biến đ°ợc sử dụng

để tham chiếu đến vwng nhớ đó Khi chúng ta truyền một biến kiểudữ liáu đái t°ợng vào một hàm hoặc ph°¡ng thāc, một bÁn sao cÿa tham chiếu đến vwng nhớ cÿa đái t°ợng đ°ợc t¿o ra và đ°ợc truyền vào hàm Điều này có nghĩa là khi giá trị cÿa đái t°ợng đ°ợc thay đổi trong hàm, giá trị cÿa biến gác cũng sẽ bị thay đổi, b«i vì cÁ biến

và đái t°ợng đều tham chiếu đến cwng một vwng nhớ

- Một điều đặc biát nữa khi dwng kiểu dữ liáu đái t°ợng thì chúng có thể null đ°ợc con kiểu nguyên thÿy không thể thực hián đ°ợc điều này

Ví dụ kiểu dữ liáu nguyên thuÿ (c¡ bÁn)

public static void main(String[] args) {

Ví dụ kiểu dữ liáu đái t°ợng

public class ReferenceTypeExample {

int value = 10;

}

public static void main(String[] args) {

ReferenceTypeExample x = new ReferenceTypeExample();

Trang 28

Đái t°ợng là một khái niám đ°ợc dwng để chỉ một thực thể cụ thể có tr¿ng thái và hành

vi BÁn chất cÿa một đái t°ợng xác định b«i các tr¿ng thái và hành vi mà nó có thể thực hián đ°ợc

- Tr¿ng thái: Những đặc điểm, tính chất cÿa một đái t°ợng

- Hành vi: Những hành động mà một đái t°ợng thực hián

Ví dụ, một đái t°ợng "xe h¡i", bÁn chất cÿa nó có thể bao gãm các thuộc tính nh° màu sắc, hãng sÁn xuất, tác độ tái đa, cũng nh° các ph°¡ng thāc nh° "kh«i động", "dừng",

Tham chi ếu đối t°ợng (Object Reference):

- Tham chiếu là một biến hoặc giá trị mà chỉ đến một vwng nhớ chāa dữ liáu cÿa một đái t°ợng

- Khi t¿o một đái t°ợng, t¿o một tham chiếu để truy cÁp đến nó

Ví dụ, trong Java, b¿n có thể t¿o một tham chiếu đến một đái t°ợng "xe h¡i" nh° sau:

Car myCar = new Car();

Trong đó, myCar là tham chiếu đến một đái t°ợng "xe h¡i"

3.7 C¡ chë ph攃Āp gcn và ccc ph攃Āp so scnh

Trong Java, c¡ chế phgp gán và các phgp so sánh đái t°ợng đều liên quan đến cách xử

lý tham chiếu đái t°ợng

Ph gp gán (Assignment):

- Phgp gán trong Java cho phgp gán giá trị cÿa một biến đến một biến khác hoặc gán một đái t°ợng đến một biến tham chiếu

- Khi gán một đái t°ợng cho một biến tham chiếu, thì chỉ có tham chiếu đến đái t°ợng

đó đ°ợc chuyển đi, không phÁi là bÁn chất cÿa đái t°ợng

Ví dụ:

Car car1 = new Car("Toyota");

Car car2 = car1; // gán tham chiếu của car1 đến car2, không tạo ra một bản sao mới của đối tượng

Ph gp so sánh đối t°ợng (Object Comparison):

- Trong Java, phgp so sánh đái t°ợng (==) so sánh xem hai tham chiếu có trß đến cwng một đái t°ợng trong bộ nhớ hay không

Trang 29

- Đái với các đái t°ợng, phgp so sánh đái t°ợng sẽ so sánh các tham chiếu, không phÁi nội dung cÿa chúng

Ví dụ:

Car car1 = new Car("Toyota");

Car car2 = new Car("Toyota");

Car car3 = car1;

System.out.println(car1 == car2); // false, vì car1 và car2 có các tham chiếu khác nhau

System.out.println(car1 == car3); // true, vì car1 và car3 trỏ đến cùng một đối tượng

System.out.println(car1.equals(car2)); // true nếu phương thức equals() được cài đặt để so sánh nội dung của đối tượng

3.8 C¡ chë truyën tham s÷ và gic trß trk vë

Truyền tham sá kiểu c¡ bÁn: đái với các tham sá kiểu c¡ bÁn nh° int, double, char, chỉ c

Ví dụ:

public class Example {

public static void printNumber(int number) {

Ví dụ:

Trang 30

public class Example {

public static void printMessage(String message) {

System.out.println("Message: " + message);

}

public static void main(String[] args) {

String greeting = "Hello, world!";

printMessage(greeting); // Gọi phương thức và truyền tham

Ví d ụ: public class Example {

public static void printDetails(String name, int age) {

System.out.println("Name: " + name + ", Age: " + age); }

public static void main(String[] args) {

String studentName = "Alice";

int studentAge = 20;

printDetails(studentName, studentAge); // Gọi phương thức

và truyền tham số name và age

}

}

Giá trị trả về:

Một ph°¡ng thāc trong Java có thể trÁ về một giá trị với một kiểu dữ liáu cụ thể, hoặc

có thể không trÁ về giá trị nào (void)

Để trÁ về một giá trị, b¿n sử dụng từ khóa return trong ph°¡ng thāc và chỉ định giá trị muán trÁ về

Kiểu dữ liáu cÿa giá trị trÁ về phÁi phw hợp với kiểu đ°ợc khai báo cho ph°¡ng thāc Khi ph°¡ng thāc đ°ợc gọi, giá trị trÁ về có thể đ°ợc sử dụng cho các mục đích khác nhau nh° gán cho biến, sử dụng trong các biểu thāc, hoặc truyền làm tham sá cho các ph°¡ng thāc khác

Ví dụ:

public class Example {

// Phương thức truyền tham số

public static void printMessage(String message) {

public static void main(String[] args) {

// Gọi phương thức với tham số

printMessage("Hello, world!");

Trang 31

// Gọi phương thức và sử dụng giá trị trả về

int sum = add(5, 3);

System.out.println("Sum: " + sum);

}

}

Trong ví dụ này, ph°¡ng thāc printMessage nhÁn một tham sá message và không trÁ

về giá trị nào Ph°¡ng thāc add nhÁn hai tham sá a và b, và trÁ về tổng cÿa chúng

3.9 Tham chi ëu this

Trong Java, this là một từ khóa đặc biát đ°ợc sử dụng để tham chiếu đến đái t°ợng hián t¿i từ bên trong một ph°¡ng thāc cÿa đái t°ợng đó

Tham chiếu đến các tr°ờng và ph°¡ng thức của đối t°ợng hiện tại:

- Khi b¿n sử dụng this, b¿n có thể truy cÁp các tr°£ng (biến thành viên) và ph°¡ng thāc cÿa đái t°ợng hián t¿i mà không c

- Điều này hữu ích khi có sự trwng lặp giữa tên tham sá và tên tr°£ng hoặc kh muán làm

rõ rằng đang tham chiếu đến tr°£ng hoặc ph°¡ng thāc cÿa đái t°ợng hián t¿i

Ví d ụ: public class MyClass {

private int number;

public void setNumber(int number) {

this.number = number; // Tham chiếu đến trường number của đối tượng hiện tại

}

public int getNumber() {

return this.number; // Tham chiếu đến trường number của đối tượng hiện tại

}

}

Truy cập các ph°¡ng thức khác của cùng một đối t°ợng:

Có thể sử dụng this để gọi một ph°¡ng thāc khác cÿa cwng một đái t°ợng

Ví d ụ: public class MyClass {

public void method1() {

// Gọi phương thức method2() của cùng một đối tượng

this.method2();

}

public void method2() {

// Thân phương thức method2()

}

}

Trong một sá tr°£ng hợp, viác sử dụng this có thể không ccode rõ ràng và dß đọc h¡n trong nhiều tình huáng

3.10 C cc đặc điऀm đặc thù ngôn ngư뀃 nh° thành viên static, package, tham s÷ dong lßnh

Trong Java, có một sá đặc điểm đặc thw cÿa ngôn ngữ, bao gãm các thành viên static, gói (package), và tham sá dong lánh

Trang 32

Thành viên static:

- Trong Java, thành viên static là các thành viên cÿa một lớp mà thuộc về lớp chā không phÁi cÿa các đái t°ợng cụ thể cÿa lớp đó

- Các thành viên static bao gãm các biến static và các ph°¡ng thāc static

- Biến static chia sẻ giá trị giữa tất cÁ các thể hián (instances) cÿa lớp, trong khi ph°¡ng thāc static có thể đ°ợc gọi mà không c

Ví d ụ: public class MyClass {

public static int staticVariable;

public int instanceVariable;

public static void staticMethod() {

// Thân phương thức staticMethod()

}

public void instanceMethod() {

// Thân phương thức instanceMethod()

}

}

Gói (Package):

- Trong Java, gói (package) là một cách để tổ chāc và quÁn lý các lớp và giao dián

- Một gói là một tÁp hợp các lớp liên quan đ°ợc đặt trong cwng một th° mục và đ°ợc sắp xếp theo cấu trúc th° mục há tháng t°¡ng āng

- Gói giúp tránh xung đột tên lớp, cung cấp tính tổ chāc, và kiểm soát quyền truy cÁp thông qua viác sử dụng các từ khóa nh° public, protected, private

Ví d ụ: package com.example.myproject;

public class MyClass {

// Thân lớp MyClass

}

Tham số dòng lệnh (Command Line Arguments):

- Trong Java, có thể truyền tham sá vào ch°¡ng trình Java khi nó đ°ợc ch¿y từ dong lánh

- Các tham sá này đ°ợc chuyển vào ph°¡ng thāc main() cÿa lớp chính (class) cÿa ch°¡ng trình d°ới d¿ng một mÁng các chuỗi (String[] args)

Ví d ụ: public class Main {

public static void main(String[] args) {

System.out.println("Number of command line arguments: " + args.length);

for (String arg : args) {

System.out.println(arg);

}

}

}

Trang 33

Khi ch¿y ch°¡ng trình này từ dong lánh và truyền các đái sá, chúng sẽ đ°ợc in ra trong ph°¡ng thāc main() Ví dụ: java Main arg1 arg2 Trong đó, arg1 và arg2 là các tham sá dong lánh

3.11 Quan h ß composition giư뀃a ccc đ÷i t°£ng

Trong lÁp trình h°ớng đái t°ợng, quan há composition là một lo¿i quan há mà một đái t°ợng chāa một hoặc nhiều đái t°ợng khác nh° là một ph

là "đái t°ợng thành ph

bị hÿy, tất cÁ các đái t°ợng thành ph

Trong Java, quan há composition th°£ng đ°ợc thể hián thông qua viác khai báo các tr°£ng (fields) cÿa lớp chÿ là các đái t°ợng cÿa các lớp khác Các đái t°ợng này đ°ợc t¿o và quÁn lý b«i lớp chÿ

Ví d ụ: public class Car {

private Engine engine;

private Wheel[] wheels;

public Car() {

this.engine = new Engine();

this.wheels = new Wheel[4];

for (int i = 0; i < 4; i++) {

this.wheels[i] = new Wheel();

1 Định nghĩa lớp HocSinh (Student):

- Các thuộc tính bao gãm: mã học sinh, tên, tuổi và điểm trung bình

- Xác định các ph°¡ng thāc để truy cÁp và cÁp nhÁt thông tin cÿa học sinh

Trang 34

2 T¿o lớp ch°¡ng trình chính để thử nghiám các chāc năng cÿa lớp HocSinh (Student)

H°ớng dẫn:

1 T¿o lớp HocSinh (Student) với các thuộc tính và ph°¡ng thāc phw hợp nh° đã mô tÁ trong bài tÁp

2 T¿o lớp ch°¡ng trình chính để thực hián các chāc năng sau:

- T¿o một đái t°ợng HocSinh (Student) mới

- Thiết lÁp và hiển thị thông tin cÿa học sinh

- CÁp nhÁt thông tin cÿa học sinh (ví dụ: điểm trung bình)

- Hiển thị thông tin cÿa học sinh sau khi cÁp nhÁt

Tham khảo:

class HocSinh {

private String maHocSinh;

private String ten;

private int tuoi;

private double diemTrungBinh;

public HocSinh(String maHocSinh, String ten, int tuoi, double diemTrungBinh) {

public String toString() {

return "Mã học sinh: " + maHocSinh + ", Tên: " + ten + ", Tuổi: " + tuoi + ", Điểm TB: " + diemTrungBinh;

}

}

public class Main {

public static void main(String[] args) {

// Tạo một đối tượng HocSinh mới

HocSinh hocSinh = new HocSinh("HS001", "Nguyen Van A", 15, 8.5);

// Hiển thị thông tin của học sinh

System.out.println("Thông tin của học sinh:");

System.out.println(hocSinh);

// Cập nhật điểm trung bình của học sinh

hocSinh.setDiemTrungBinh(9.0);

Trang 35

// Hiển thị thông tin của học sinh sau khi cập nhật

System.out.println("\nThông tin của học sinh sau khi cập nhật:");

System.out.println(hocSinh);

}

}

Trang 36

4.1 Khci nißm kë thư뀀a

Kế thừa là một trong những khái niám quan trọng nhất trong lÁp trình h°ớng đái t°ợng, cho phgp một lớp (class) mới có thể sử dụng các thuộc tính và ph°¡ng thāc cÿa lớp (hoặc các giao dián) đã tãn t¿i Trong Java, có thể kế thừa từ một lớp khác bằng cách sử dụng từ khóa extends

Lớp con (subclass) và lớp cha (superclass):

- Lớp con (subclass) là lớp kế thừa từ một lớp khác, đ°ợc gọi là lớp cha (superclass)

- Lớp con kế thừa tất cÁ các thuộc tính và ph°¡ng thāc non-private cÿa lớp cha

Từ khóa extends:

Để kế thừa từ một lớp khác, b¿n sử dụng từ khóa extends

Ví d ụ: class ChildClass extends ParentClass {

Ví d ụ: class ChildClass extends ParentClass {

@Override

public void someMethod() {

// Thân phương thức mới của lớp con

Ví d ụ: class ChildClass extends ParentClass {

public void someMethod() {

super.someMethod(); // Gọi phương thức của lớp cha

}

}

Trang 37

Kế thừa trong Java giúp tái sử dụng mã nguãn, giÁm thiểu sự lặp l¿i và tăng tính linh ho¿t cÿa mã nguãn Tuy nhiên, nó cũng c

đề nh° kết nái m¿nh (tight coupling) giữa các lớp và nguy c¡ rÿi ro trong quÁn lý thay đổi

4.2 Cài đặt quan hß thư뀀a kë trong Java

GiÁ sử có một lớp Animal là lớp cha và t¿o ra một lớp con là Dog, mô phßng một con chó // Lớp cha Animal

public void sound() {

System.out.println("The animal makes a sound.");

}

}

// Lớp con Dog kế thừa từ lớp Animal

class Dog extends Animal {

public Dog(String name) {

// Gọi constructor của lớp cha bằng từ khóa super

super(name);

}

// Ghi đg ph°¡ng thāc sound() cÿa lớp cha

@Override

public void sound() {

System.out.println("The dog barks.");

}

// Phương thức mới của lớp Dog

public void wagTail() {

System.out.println("The dog wags its tail.");

}

}

// Lớp chính Main

public class Main {

public static void main(String[] args) {

// Tạo một đối tượng Dog

Dog dog = new Dog("Buddy");

// Gọi phương thức của lớp cha

dog.sound(); // Kết quả: "The dog barks."

// Gọi phương thức mới của lớp Dog

dog.wagTail(); // Kết quả: "The dog wags its tail."

}

}

Trong ví dụ này:

Trang 38

- Lớp Animal là lớp cha, có một tr°£ng name và một ph°¡ng thāc sound() để phát ra tiếng

- Lớp Dog là lớp con cÿa Animal, kế thừa từ Animal Nó cung cấp một ph°¡ng thāc mới wagTail() và ghi đg ph°¡ng thāc sound() cÿa lớp cha để mô tÁ tiếng sÿa cÿa chó

- Trong ph°¡ng thāc main(), chúng ta t¿o một đái t°ợng Dog và gọi các ph°¡ng thāc cÿa nó

4.3 Quyën truy nh⌀p và che dấu thông tin

Trong Java, quyền truy cÁp và che dấu thông tin là hai khái niám quan trọng liên quan đến viác kiểm soát viác truy cÁp vào các thành phconstructor) Java cung cấp các từ khóa để xác định māc độ quyền truy cÁp và cách che dấu thông tin:

Quyền truy cập (Access Modifiers):

Public (public): các thành phgãm từ bên ngoài lớp đó

Ví d ụ: public class MyClass {

public int publicField;

public void publicMethod() {

// Thân phương thức public

}

}

Private (private): các thành phcwng một lớp

Ví d ụ: public class MyClass {

private int privateField;

private void privateMethod() {

// Thân phương thức private

}

}

Protected (protected): các thành phtrong cwng một lớp, từ các lớp con, và từ các lớp trong cwng gói

Ví d ụ: public class MyClass {

protected int protectedField;

protected void protectedMethod() {

// Thân phương thức protected

}

}

Che dấu thông tin (Encapsulation):

Che dấu thông tin là quá trình ऀn các chi tiết cÿa một đái t°ợng và chỉ hiển thị những ph

Trang 39

Trong Java, viác che dấu thông tin th°£ng đ°ợc thực hián bằng cách đặt các tr°£ng (fields) là private và cung cấp các ph°¡ng thāc public để truy cÁp và cÁp nhÁt giá trị cÿa chúng (con đ°ợc gọi là getters và setters)

Ví d ụ: public class Person {

private String name;

private int age;

// Getter và setter cho trường name

public String getName() {

// Getter và setter cho trường age

public int getAge() {

4.4 Thành viên final, constructor

Trong Java, final là một từ khóa đ°ợc sử dụng để đánh dấu một biến, một ph°¡ng thāc hoặc một lớp để chỉ ra rằng chúng là bất biến (immutable) hoặc không thể thay đổi sau khi đã đ°ợc kh«i t¿o hoặc đ°ợc khai báo D°ới đây là cách b¿n có thể sử dụng final cho thành viên

và constructor trong Java:

Thành viên final:

Biến final: một biến final không thể thay đổi giá trị sau khi đã đ°ợc kh«i t¿o

Ví d ụ: public class Example {

final int x = 10;

public static void main(String[] args) {

Example ex = new Example();

// ex.x = 20; // Lỗi: Không thể gán lại giá trị cho biến final

}

}

Ph°¡ng thāc final: một ph°¡ng thāc final không thể bị ghi đg (override) trong các lớp con

Ngày đăng: 02/06/2024, 11:50

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN