Professional Documents
Culture Documents
Nội dung
• Abstraction
− "a concept or idea not associated with any specific
instance"
• Giảm thiểu và tinh lọc các chi tiết nhằm tập trung
vào một số khái niệm/vấn đề quan tâm tại một
thời điểm.
− Ví dụ: Các định nghĩa toán học: Ký hiệu x được dùng để
thể hiện cho các phép nhân
4
Trừu tượng hóa
5
Trừu tượng hóa dữ liệu trong
OOP
6
Ví dụ: Điện thoại Nokia
7
Ví dụ: Điện thoại Nokia
8
Ví dụ: Điện thoại Nokia
9
Ví dụ: Điện thoại Nokia
10
Ví dụ: Điện thoại Nokia
11
Ví dụ
12
2
• Lớp chính là kết quả của quá trình trừu tượng hóa
dữ liệu
− Lớp định nghĩa một kiểu dữ liệu mới, trừu tượng hóa một
tập các đối tượng
− Một đối tượng gọi là một thể hiện của lớp
14
Các thành phần của lớp
borrow
Vu Thi Huong
Giang
getAuthorName
250 pages
Human
computer
interaction
countPages
Object 15
Class MyBook
Thuộc tính
• Thuộc tính
− Một thuộc tính của một lớp là một trạng thái chung được
đặt tên của tất cả các thể hiện của lớp đó có thể có
− Ví dụ: Lớp Ô tô có các thuộc tính
+ Màu sắc
+ Vận tốc
• Các thuộc tính của cũng là các giá trị trừu tượng.
Mỗi đối tượng có bản sao các thuộc tính của
riêng nó
− Ví dụ: một chiếc Ô tô đang đi có thể có màu đen, vận tốc
60 km/h
16
Phương thức
• Phương thức
− Xác định các hoạt động chung mà tất cả các thể hiện của
lớp có thể thực hiện được.
− Xác định cách một đối tượng đáp ứng lại một thông điệp
− Thông thường các phương thức sẽ hoạt động trên các
thuộc tính và thường làm thay đổi các trạng thái của lớp.
− Bất kỳ phương thức nào cũng phải thuộc về một lớp nào
đó
− Ví dụ: Lớp Ô tô có các phương thức
+ Tăng tốc
+ Giảm tốc
17
Phạm vi
18
3
20
Gói trong Java
21
Gói trong Java
22
Quy ước đặt tên gói
23
Các package trong Java
•java.applet •javax.rmi
•java.awt •javax.security
•java.beans •javax.sound
•java.io •javax.sql
•java.lang •javax.swing
•java.math •javax.transaction
•java.net •javax.xml
•java.nio •org.ietf.jgss
•java.rmi •org.omg.CORBA
•java.security •org.omg.CosNaming
•java.sql •org.omg.Dynamic
•java.text •org.omg.IOP
•java.util •org.omg.Messaging
•javax.accessibility •org.omg.PortableInterceptor
•javax.crypto •org.omg.PortableServer
•javax.imageio •org.omg.SendingContext
•javax.naming •org.omg.stub.java.rmi
•javax.net •org.w3c.dom
•javax.print •org.xml
24
Các package trong Java
25
Các package trong Java
26
Không gian tên trong C++/C#
− Cú pháp:
namespace <tên namespace>
{
/ / Khai báo các lớp ở đây
}
− Đối không gian tên nằm trong không gian tên khác
namespace <tên namespace ngoài>
{
namespace <tên namespace trong>
{
/ / Kha i báo các lớ p ở đây
}
}
27
Khai báo lớp
29
Thuộc tính
30
Thuộc tính
31
Phương thức
• Xác định cách một đối tượng đáp ứng lại thông
điệp
− Khai báo: tương tự khai báo hàm
32
Phương thức
• Cú pháp
accessmodifier kiểuTrảVề tênPhươngThức (dsthamsố) {
/ / Nội dung phương thức
}
33
Chỉ định truy cập
34
Ví dụ: Lớp BankAccount
package com.megabank.models;
public c l a s s BankAccount {
String owner;
double balance;
boolean d e b i t ( d o u b l e amount){
i f (amount > balance)
return false;
else {
balance - = amount;
return true;
}
}
v o i d c r e d i t ( d o u b l e amount){
balance += amount;
}
}
4
37
Khai báo và khởi tạo dữ liệu
38
Khai báo
39
Khởi tạo
• Đối với kiểu dữ liệu tham chiếu (1): Khởi tạo bằng
toán tử new
− Ví dụ: acc1 = new BankAccount();
• Nếu không được khởi tạo: đối tượng mang giá trị
null
41
Kết hợp khai báo và khởi tạo dữ
liệu
42
Truy cập đến phương thức và
thuộc tính của đối tượng
• Sử dụng toán tử
• Không cần thiết nếu truy cập từ trong cùng một
lớp
43
Tự tham chiếu
44
Ví dụ: từ khóa this
}
45
Ví dụ:
Khởi tạo đối tượng
Account object of Mrs. Giang
Variable declaration
owner
Class Account 46
Ví dụ:
Truy cập đến các thuộc tính
public class Account { Account object of Ms. Giang
String name;
long balance;
void display(){
System.out.println("Display:" + name
+ " " + balance); owner: Vu Thi Huong Giang
} balance: 2.000.000 VND
47
Ví dụ:
Truy cập đến các phương thức
public class Account { / / Class t h a t uses
String name;
/ / methods o f Account
long balance;
o b j e c t Account o b j = new
void display(){ Account()
System.out.println("Display:" + name obj.display();
+ " " + balance); obj.deposit(1000000);
}
obj (Caller)
Account object
48
Tham chiếu đến lớp khác gói
• Đối với lớp trong cùng một gói: chỉ cần tên lớp
− Ví dụ: Account
• Đối với lớp khác gói: phải cung cấp đầy đủ tên
lớp và tên gói
− Ví dụ trong Java: oop.Account
Ví dụ hoặc import j a v a x . s w i n g . * ;
để import tất cả các lớp trong gói
import javax.swing.JOptionPane;
String r e s u l t ;
r e s u l t = JOptionPane.showInputDialog("Hay nhap ten b a n :nhap
javax.swing.JOptionPane.showInputDialog("Hay " ) ; ten b a n : " ) ; 49
JOptionPane.showMessageDialog(null, "Xin chao " +"Xin
javax.swing.JOptionPane.showMessageDialog(null, r e s uchao
l t + ""! "+)r;e s u l t + " ! " ) ;
Đối tượng trong C++
50
5
• Trong lập trình cấu trúc: Các biến địa phương khai
báo cục bộ trong hàm:
− Trong trường hợp các biến địa phương không khai báo là
biến static thì mỗi lần gọi hàm chương trình dịch lại đăng
ký tạo ra biến mới
− Khi chúng ta khai báo các biến địa phương là các biến
static thì chương trình dịch sẽ chỉ khởi tạo duy nhất một
lần (ở lần gọi đầu tiên) biến địa phương này và thông
qua con trỏ stack ở những lần gọi sau chi tham chiếu tới
biến đã tạo ra này để sử dụng lại chúng mà không tạo ra
biến mới
− Tạo một lần/tham chiếu nhiều lần/lưu giá trị của lần
tham chiếu trước
52
Biến địa phương static
53
Thành viên tĩnh trong OOP
54
Thuộc tính static
55
Ví dụ
class Te s t S t a t i c {
public s t a t i c i n t i S t a t i c ;
public i n t iNonStatic;
}
p u b l i c class TestS {
p u b l i c s t a t i c void m a i n ( S t r i n g [ ] args)
{ Te s t S t a t i c obj1 = new Te s t S t a t i c ( ) ;
o b j 1 . i S t a t i c = 10; obj1.iNonStatic = 11;
System.out.println(obj1.iStatic + ” , ”
+obj1.iNonStatic);
Te s t S t a t i c obj2 = new Te s t S t a t i c ( ) ;
System.out.println(obj2.iStatic + ” , ”
+ obj2.iNonStatic);
o b j 2 . i S t a t i c = 12;
System.out.println(obj1.iStatic + ” , ”
+ obj1.iNonStatic);
}
}
Phương thức static
• Các phương thức không tương tác với các "thể
hiện" của lớp
• Các phương thức "tiện ích", không cần thiết phải
khởi tạo đối tượng để sử dụng
• Các phương thức static chỉ có thể truy cập vào
các thuộc tính static và chỉ có thể gọi các phương
thức static trong cùng lớp
57
Ví dụ
class MyUtils {
p u b l i c s t a t i c double m e a n ( i n t [ ] p )
{ i n t sum = 0 ;
f o r ( i n t i=0; i<p.length; i++)
{ sum += p [ i ] ;
}
r e t u r n ((double)sum) / p . l e n g t h ;
}
}
59
Ví dụ
• Thuộc tính
• Phương thức
Ví dụ
JOptionPane.showMessageDialog(null,
"Ban da t hao t a c lo i " , "Thong bao l o i " ,
JOptionPane.ERROR_MESSAGE);
JOptionPane.showConfirmDialog(null,
"Ban co chac chan muon t h o a t ? " ,
"Hay l u a chon", OptionPane.YES_NO_OPTION);
Ví dụ
Object[] opt i o n s = { " OK", "CANCEL" } ;
JOptionPane.showOptionDialog(null,
“Nhan OK de t i e p tu c" , "Canh bao " ,
JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE,
null,options,options[0]);
Thành viên hằng
• Ví dụ:
f i n a l double PI = 3.141592653589793;
p u b l i c f i n a l i n t VAL_THREE = 39;
p r i v a t e f i n a l i n t [ ] A= { 1 , 2 , 3 , 4 , 5 , 6 } ;
63
Thành viên hằng & tĩnh
64
6
Biểu đồ lớp
Biểu diễn lớp trong UML
Biểu đồ lớp
66
Chỉ định truy cập
+ submitFinalGrade()
+ acceptCourseOffering()
+ setMaxLoad()
+ takeSabbatical()
+ teachClass()
67
Giá trị tĩnh
- name
- address
- studentID
- nextAvailID : int
68
Lớp và đối tượng trong UML
Class
:Student
70
QUIZ • Lớp BankAccount
BankAccount
- owner: String
• 60 mins - balance: double
• Given the 2 classes BankAccount
+ debit(double): boolean
and Student.
• Try creating the connections + credit(double)
between two classes and write code
to demonstrate your idea.
• With the code implemented, how do
Student
you compile and run the program?
- name
- address
- studentID
- dateOfBirth