B www.sites.google.com/site/khaiphong ĐH Công nghệ Thông tin Các khái niệm liên quan OOP: Ví dụ: lớp SINHVIEN là một thiết kế chung cho nhiều đối tượng sinh viên được tạo ra... B www
Trang 1www.sites.google.com/site/khaiphong
ĐH Công nghệ Thông tin
Giáo viên: Dương Khai Phong Email: khaiphong@gmail.com
Lý thuyết: 45 tiết
Thực hành: 30 tiết
Trang 3LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Các khái niệm liên quan OOP
Các đặc điểm trong OOP
Các lớp cơ bản trong java
Trang 4 Java là ngôn ngữ lập trình thuần hướng đối tượng
Mọi thứ trong một hệ thống được viết bằng ngôn ngữ java phải được triển khai là đối tượng
Ví dụ: trong một chương trình quản lý giáo vụ nhà
trường sẽ bao gồm các đối tượng:
sinh viên (student)
giáo viên (teacher)
môn học (course)
thời khóa biểu (schedule)
lớp học (classroom)
Trang 5B
www.sites.google.com/site/khaiphong
ĐH Công nghệ Thông tin
Các khái niệm liên quan OOP:
Đối tượng (object)
Từ khoá static, final, abstract, native
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Trang 6 Đối tượng: (object)
Đối tượng đại diện cho một thực thể trong thế giới thật
Ví dụ: 1 ô tô, 1 con người, 1 hình tròn, 1 khoản tiền
Mỗi đối tượng có một identity, state, và các behavior duy
nhất (state xác định đối tượng, behavior xác định đối tượng làm cái gì):
State = tập các data field (properties)
Behavior = tập các method (functions)
Ví dụ: 1 hình tròn có: Identity (Circle), State (bán kính
R), Behavior (Tính diện tích: ComputeArea)
Trang 7B
www.sites.google.com/site/khaiphong
ĐH Công nghệ Thông tin
Các khái niệm liên quan OOP:
Ví dụ: lớp SINHVIEN là một thiết kế chung cho nhiều đối
tượng sinh viên được tạo ra
Trang 8 Khai báo lớp: (class)
Trang 9B
www.sites.google.com/site/khaiphong
ĐH Công nghệ Thông tin
Các khái niệm liên quan OOP:
Khai báo và tạo đối tượng của lớp trong 1 dòng lệnh:
ClassName objectRef = new ClassName();
Ví dụ: Circle myCircle = new Circle();
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Trang 10 Truy nhập đối tượng:
Trang 11B
www.sites.google.com/site/khaiphong
ĐH Công nghệ Thông tin
Các khái niệm liên quan OOP:
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Mặc định: các lớp, biến hoặc dữ liệu có thể được
truy nhập bởi bất kỳ lớp nào trong cùng gói
(package)
public: lớp, dữ liệu hay phương thức có thể được
truy nhập bởi tất cả các lớp trong bất kỳ gói nào
private: dữ liệu hoặc phương thức chỉ có thể được
truy nhập bởi lớp khai báo
protected: chỉ các lớp con của lớp đó và các lớp trong cùng một gói mới được phép tạo các thể hiện của lớp đó
Trang 12 Hàm khởi tạo: (Constructor)
Trang 13B
www.sites.google.com/site/khaiphong
ĐH Công nghệ Thông tin
Các khái niệm liên quan OOP:
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Đặc điểm của Constructor:
Một constructor không có tham số được gọi
Các Constructor được gọi khi sử dụng toán
tử new để tạo một đối tượng Nó đóng vai trò khởi tạo đối tượng
Trang 14 Từ khoá this:
thay thế cho đối tượng hiện tại
gọi các constructor khác của đối tượng
Trang 15 Ví dụ: xây dựng lớp Rectangle như lược đồ UML sau:
Rectangle
- width: double
- height: double
- color: String + Rectangle() + Rectangle(width: double, height:
double, color: String) + getWidth(): double
+ setWidth(width: double): void + getHeight(): double
+ setHeight(height: double): void + getColor(): String
+ setColor(width: String): void + findArea(): double
+ findPerimeter(): double
chiều rộng hình chữ nhật chiều dài hình chữ nhật màu hình chữ nhật Tạo một HCN với c.dài = 1, c.rộng = 1 Tạo một HCN với c.dài và c.rộng
xác định trong tham số Trả về chiều rộng HCN
Thiết lập chiều rộng mới cho HCN Trả về chiều dài HCN
Thiết lập chiều dài mới cho HCN Trả về màu của HCN
Thiết lập màu mới cho HCN Trả về diện tích HCN
Trang 16 Mảng các đối tượng:
Một mảng các đối tượng thực chất là mảng các biến tham chiếu
Khai báo và tạo mảng các đối tượng:
Khởi tạo cho từng đối tượng trong mảng:
Circle[] circleArray = new Circle[10];
for (int i=0; i<circleArray.length; i++){
circleArray[i] = new Circle();
}
Trang 17B
www.sites.google.com/site/khaiphong
ĐH Công nghệ Thông tin
Các khái niệm liên quan OOP:
Từ khoá static, final, abstract, native:
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
static: cho biết dữ liệu và phương thức là chung cho lớp chứ
không phải của thể hiện (instance)
final: cho biết một lớp, dữ liệu hay phương thức là cuối, không được phép overridden bởi một thành phần con nào khác
abstract: cho biết một lớp hay phương thức là trừu tượng không cài đặt gì cả
native: cho biết một phương thức được lập trình bởi một ngôn
ngữ lập trình khác (Ví dụ: native myMethod(); phương thức myMethod có thể được tạo bởi một ngôn ngữ lập trình khác java)
Trang 18Biến dữ liệu của thể hiện instance
Biến dữ liệu của lớp
Trang 19 Ví dụ 2: từ khoá static giữa dữ liệu và phương thức
Error: phương thức static không được phép truy cập thành dữ liệu không thuộc static
Trang 20Đối với phương thức non-static cần phải có đối tượng gọi trước nó
Đối với phương thức
static KHÔNG CẦN
phải có đối tượng gọi trước nó
Trang 21 Ví dụ 4: từ khoá final cho thuộc tính dữ liệu
Error: đối với thành phần dữ liệu có từ khoá final thì thành phần
dữ liệu đó được xem như hằng số (không gán lại giá trị mới)
Ví dụ 5: từ khoá abstract cho phương thức
Error: từ khoá abstract cho biết phương thức hello là trừu tượng thì không được phép định nghĩa Chỉ có lớp dẫn xuất mới định nghĩa
Trang 22 Hỗ trợ những nguyên tắc cơ bản của lập trình hướng đối tượng
Tính đóng gói (encapsulation): là cơ chế che dấu đi một phần các chi tiết cài đặt, cũng như phần dữ liệu cục bộ của nó, và chỉ công bố ra ngoài những gì cần công bố để trao đổi với các đối tượng khác
Tính kế thừa (inheritance): là sự tái sử dụng các lớp có các đặc tính chung với nhau để tạo ra các lớp mới
Tính đa hình (polymorphism): là cơ chế cho phép cài đặt các lớp dẫn xuất khác nhau từ một lớp nguồn Một phương thức của đối tượng có thể có nhiều kiểu thể hiện khác nhau
Trang 23 Ví dụ 1: khai báo và sử dụng package để thể hiện tính đóng gói
Cách khai báo một lớp thuộc về một gói package nào đó trong java
Tập tin triangle.java Tập tin rectangle.java
Tập tin testpackage.java
Sử dụng gói đã tạo
Trang 24Xây dựng lớp dẫn xuất (Ví dụ: lớp student) Extends : từ khoá khai báo
kế thừa
Super : từ khoá gọi
phương thức của lớp cha
Trang 25C
www.sites.google.com/site/khaiphong
ĐH Công nghệ Thông tin
Các đặc điểm trong OOP:
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Nhận xét tính kế thừa (inheritance):
Thừa kế là một quan hệ IS-A (còn thể hiện của một lớp là một quan hệ HAS-A)
Ví dụ: có lớp cơ sở là Animals các lớp dẫn xuất như: lớp
Dog, lớp Cat (Dog, Cat IS A animals), còn các thể hiện của
Dog, Cat sẽ có thể các tính chất của animals (HAS-A)
Một lớp có từ khoá final trước từ khoá class sẽ không được phép
kế thừa
Một lớp là final thì không là lớp trừu tượng
abstract final class myclass{…} // Error
Trong java không có khái niệm lớp tĩnh: static class myclass()
Trang 26Xây dựng lớp dẫn xuất (Ví dụ: lớp rectangle )
mà chỉ được tham chiếu đến đối tượng
abstract : phương thức trừu tượng Lớp dẫn xuất bắt
buộc phải định nghĩa lại phương thức này
Định nghĩa lại phương thức đã
Trang 27 Ví dụ 3: Tính đa hình trong java
Xây dựng lớp dẫn xuất (Ví dụ: lớp circle )
Sử dụng các lớp đã xây dựng ( main )
Tuỳ theo đối tượng được tham chiếu mà phương thức tính diện tich của đối tượng tương ứng được sử dụng
Trang 28 java.lang
Chứa các lớp Java lõi (core Java class), gồm lớp số (numeric class), chuỗi ký tự, đối tượng (Object) Gói này được import hoàn toàn vào tất cả các chương trình Java
java.awt: chứa các lớp đồ họa
java.applet: chứa các lớp hỗ trợ applet
java.io: chứa các lớp cho các luồng vào-ra và các file
java.util: chứa nhiều tiện ích, ví dụ date
java.net: chứa các lớp hỗ trợ giao tiếp mạng
Các lớp khác như: java.sql, java.rmi
Trang 29D
www.sites.google.com/site/khaiphong
ĐH Công nghệ Thông tin
Các lớp cơ bản trong java:
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Lớp String – xử lý chuỗi cố định
Lớp StringBuffer – xử lý chuỗi linh động (nối
chuỗi, cắt chuỗi,…)
Lớp StringTokenizer –xử lý chuỗi con
Lớp Character – xử lý ký tự trong chuỗi
Trang 30 Các lớp liên quan đến chuỗi: String
Xây dựng chuỗi:
• String message = "Welcome to Java!"
• String message = new String("Welcome to Java!“);
• String s = new String();
Lấy độ dài chuỗi và lấy các ký tự cụ thể trong chuỗi
Ghép chuỗi (concat)
Chuỗi con (substring(index), substring(start, end))
So sánh (equals, compareTo)
String Conversions
Tìm 1 ký tự hoặc chuỗi con trong 1 chuỗi
Chuyển đổi giữa Strings và Arrays
Chuyển đổi các ký tự và các g/t số thành chuỗi
Trang 31 Các phương thức trong
lớp String:
String
+String() +String(value: String) +String(value: char[]) +charAt(index: int): char +compareTo(anotherString: String): int +compareToIgnoreCase(anotherString: String): int +concat(anotherString: String): String
+endsWithSuffixe(suffix: String): boolean +equals(anotherString: String): boolean +equalsIgnoreCase(anotherString: String): boolean +indexOf(ch: int): int
+indexOf(ch: int, fromIndex: int): int +indexOf(str: String): int
+indexOf(str: String, fromIndex: int): int +intern(): String
+regionMatches(toffset: int, other: String, offset: int, len: int): boolean +length(): int
+replace(oldChar: char, newChar: char): String +startsWith(prefix: String): boolean
+subString(beginIndex: int): String +subString(beginIndex: int, endIndex: int): String +toCharArray(): char[]
+toLowerCase(): String +toString(): String +toUpperCase(): String +trim(): String
+copyValueOf(data: char[]): String +valueOf(c: char): String
+valueOf(data: char[]): String +valueOf(d: double): String +valueOf(f: float): String +valueOf(i: int): String +valueOf(l: long): String
Lưu ý:
Có thể tạo chuỗi từ một mảng các ký tự:
char [] charArr = {'G','o','o','d',' ','d','a','y'}
Lấy chiều dài của chuỗi:
int len=message.length() // KQ: len=7
Lấy ký tự trong chuỗi:
Trang 32+compareToIgnoreCase(anotherString: String): int +concat(anotherString: String): String
+endsWithSuffixe(suffix: String): boolean +equals(anotherString: String): boolean +equalsIgnoreCase(anotherString: String): boolean +indexOf(ch: int): int
+indexOf(ch: int, fromIndex: int): int +indexOf(str: String): int
+indexOf(str: String, fromIndex: int): int +intern(): String
+regionMatches(toffset: int, other: String, offset: int, len: int): boolean +length(): int
+replace(oldChar: char, newChar: char): String +startsWith(prefix: String): boolean
+subString(beginIndex: int): String +subString(beginIndex: int, endIndex: int): String +toCharArray(): char[]
+toLowerCase(): String +toString(): String +toUpperCase(): String +trim(): String
+copyValueOf(data: char[]): String +valueOf(c: char): String
+valueOf(data: char[]): String +valueOf(d: double): String +valueOf(f: float): String
Chuỗi con: substring
String s1 = “Hi java”;
s1=s1.substring(3);
S1=s1.substring(0,2);
// KQ: false // KQ: false // KQ: true
// KQ: s1=“Hi java”
// KQ: s1=“java”
// KQ: s1=“hi”
Trang 33D
www.sites.google.com/site/khaiphong
ĐH Công nghệ Thông tin
Các lớp cơ bản trong java:
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Các lớp liên quan đến chuỗi: StringBuffer
Xây dựng chuỗi:
• StringBuffer message = "Welcome to Java! " // ERROR
• StringBuffer message = new StringBuffer ("Welcome ");
Nối chuỗi (append)
Chèn chuỗi (insert)
Xóa chuỗi (delete)
Đảo ngược chuỗi (reverse)
Chèn ký tự (setCharAt)
Trang 34+append(v: aPrimitiveType): StringBuffer
+append(str: String): StringBuffer +capacity(): int
+charAt(index: int): char +delete(startIndex: int, endIndex: int): StringBuffer +deleteCharAt(int index): StringBuffer
+insert(index: int, data: char[], offset: int, len: int): StringBuffer +insert(offset: int, data: char[]): StringBuffer
+insert(offset: int, b: aPrimitiveType): StringBuffer
+insert(offset: int, str: String): StringBuffer +length(): int
+replace(int startIndex, int endIndex, String str): StringBuffer +reverse(): StringBuffer
+setCharAt(index: int, ch: char): void +setLength(newLength: int): void +substring(start: int): StringBuffer
Trang 35 Ví dụ StringBuffer:
// KQ: strBuf=“Welcome HTML and Java” // KQ: strBuf=“Welcome HTML Java” // KQ: strBuf=“Welcome HTML Java”
// KQ: strBuf=“Welcome html Java”
// KQ: strBuf=“welcome html Java”
// KQ: strBuf=“avaaj lmth emoclew”
Trang 36 Các lớp liên quan đến chuỗi: StringTokenizer
Chuỗi có thể được bẻ thành các mảnh (gọi là token) bởi các dấu phân cách (gọi là delimiter)
Xây dựng chuỗi:
Trang 39Câu 1: Đoạn lệnh nào sau đây được đặt trong lớp student để
khai báo lớp student thuộc package uit.edu.vn
import uit.*;
import uit.edu.vn.*;
package uit.edu.vn.student;
package uit.edu.vn;
Trang 40Một phương thức final thì không thể override
Một biến final chỉ có thể khai báo trong một lớp final
Một biến final tương tự như một biến static
Trang 41Câu 3: Khai báo nào sau đây không gây ra lỗi biên dịch
abstract final class Person{}
default class Person{}
abstract int i;
native myMethod();
Trang 42A
B
C
D
Đoạn khai báo này sẽ:
Gay ra lỗi biên dịch
Tạo đối tượng của lớp Rectangle
Tạo đối tượng mới nếu lớp Rectangle có constructor
mặc định read
Tạo một biến b với giá trị ban đầu là null
Trang 43Câu 5: Phát biểu nào sau đây là đúng
Thừa kế là một quan hệ has-a
Một thể hiện của một lớp là một quan hệ has-a
Một phương thức là một quan hệ is-a
Một thể hiện của một lớp là một quan hệ is-a