8/24/2011
Nội dung
1.
Bộ môn Công nghệ Phần mềm
Viện CNTT & TT
Trường Đại học Bách Khoa Hà Nội
2.
3.
4.
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Bài 01. Tổng quan về OOP
Lập trình hướng đối tượng
Công nghệ hướng đối tượng
Ngôn ngữ lập trình Java
Ví dụ và bài tập
2
Nội dung
1.
2.
3.
4.
1.1. Lịch sử phát triển của các NNLT
Lập trình hướng đối tượng
Công nghệ hướng đối tượng
Ngôn ngữ lập trình Java
Ví dụ và bài tập
a. Hợp ngữ (Assembly language):
3
4
1.1. Lịch sử phát triển của các NNLT (2)
1.1. Lịch sử phát triển của các NNLT (3)
b. NNLT cấu trúc/thủ
tục:
5
c. NNLT hướng đối tượng:
6
1
8/24/2011
1.2. Đối tượng là gì?
Đối tượng thế giới thực
Đối tượng trong thế giới thực
Là một thực thể cụ thể mà thông thường
chúng ta có thể sờ, nhìn thấy hay cảm nhận
được.
7
Đối tượng phần mềm
8
Đối tượng
Đối tượng phần mềm
9
Mô hình hóa đối tượng
10
Tương tác giữa các đối tượng
Car
Tom
House
Đối tượng phần mềm Xe Đạp
Reality
Tree
Object-oriented modeling
Model
drives
House
Car
lives in
Tree
Tom
11
12
2
8/24/2011
Gọi hàm vs. Gửi thông điệp
Thông điệp vs. Phương thức
Gọi hàm (Call function)
Thông điệp
Phương thức
Gửi thông điệp
13
Lớp-Ví dụ Lớp Xe đạp
Hướng cấu trúc vs. Hướng ĐT?
Hướng cấu trúc:
Hướng đối tượng:
14
Khai báo cho lớp
XeDap
Đối tượng của lớp
XeDap
15
2. Công nghệ đối tượng (OT)
Nội dung
1.
2.
3.
4.
16
Lập trình hướng đối tượng
Công nghệ hướng đối tượng
Ngôn ngữ lập trình Java
Ví dụ và bài tập
(Object Technology - A Manager’s Guide, Taylor, 1997)
17
18
3
8/24/2011
2.1. Lịch sử phát triển của OT
2.2. OT được sử dụng ở đâu?
Simula
C ++
The UML
Late 1980s
1967
Các hệ thống Client/Server và phát triển
Web
1996
1972
1991
2004
Smalltalk
Java
UML 2
19
20
2.2. OO được sử dụng ở đâu? (2)
Hệ nhúng (embedded system)
Hệ thống thời gian thực (real-time)
Phân cấp
4
Mô-đun hóa
Hướng đối tượng
Đóng gói
Trừu
tượng
hóa
2.3. Các nguyên lý cơ bản của OO
21
22
b. Đóng gói (Encapsulation)
a. Trừu tượng hóa (Abstraction)
Tăng cường tính mềm dẻo
23
24
23
4
8/24/2011
c. Mô đun hóa (Modularity)
d. Phân cấp (Hierarchy)
Tài sản
Gia tăng mức độ
trừu tượng hóa
Tài khoản ngân hàng Chứng khoán
Giảm mức độ
trừu tượng hóa
Tiết kiệm Tiên gửi
Cổ phiếu
Bất động sản
Các loại giấy tờ có giá trị
25
26
25
26
Nội dung
1.
2.
3.
4.
3.1. Java là gì?
Lập trình hướng đối tượng
Công nghệ hướng đối tượng
Ngôn ngữ lập trình Java
Ví dụ và bài tập
Java là một ngôn ngữ lập trình HĐT được phát triển
bởi Sun Microsystems.
Green Team and James Gosling
(the leader)
27
3.2. Các ấn bản của Java
3.1. Java là gì?
28
Ngày nay, nhắc đến Java, không còn nhắc
đến như một ngôn ngữ mà còn là một công
nghệ, một nền tảng phát triển.
Java có một cộng đồng phát triển mạnh mẽ
29
30
5
8/24/2011
Lịch sử phát triển của J2SE
Lịch sử phát triển của J2SE (2)
JDK 1.1.4 (Sparkler): 12 tháng 9, 1997
JDK 1.1.5 (Pumpkin): 3 tháng 12, 1997
JDK 1.1.6 (Abigail): 24 tháng 4, 1998
JDK 1.1.7 (Brutus): 28 tháng 9, 1998
JDK 1.1.8 (Chelsea): 8 tháng 4, 1999
J2SE 1.2 (Playground): 4 tháng 12, 1998
J2SE 1.2.1 (none): 30 tháng 3, 1999
J2SE 1.2.2 (Cricket): 8 tháng 7, 1999
J2SE 1.3 (Kestrel): 8 tháng 5, 2000
J2SE 1.3.1 (Ladybird): 17 tháng 5, 2001
J2SE 1.4.0 (Merlin) 13 tháng 2, 2002
J2SE 1.4.1 (Hopper) 16 tháng 9, 2002
J2SE 1.4.2 (Mantis) 26 tháng 6, 2003
J2SE 5 (1.5.0) (Tiger) 29 tháng 9, 2004
Java SE 6 (Mustang), 11 tháng 12, 2006
Các bản cập nhật 2 và 3 được đưa ra vào năm 2007
Bản cập nhật 4 đưa ra tháng 1 năm 2008.
Java SE 7 (Dolphin), 4/2008.
31
32
3.3. Mô hình dịch của Java
3.2. Nền tảng của Java (Java platform)
a. Mô hình biên dịch truyền thống:
33
34
3.3. Mô hình dịch của Java (2)
b. Mô hình dịch của Java:
3.3. Mô hình dịch của Java (3)
Máy ảo Java (Java Virtual Machine):
35
Máy ảo Java là trái tim của ngôn ngữ Java
36
6
8/24/2011
3.4. Các tính năng của Java
3.4. Các tính năng của Java (2)
Java được thiết kế:
Ngôn ngữ lập trình mạnh, đầy đủ tính năng và
thuần hướng đối tượng.
Dễ học, cú pháp tương tự như C++
…
Mạnh mẽ
Hướng đối tượng
37
38
3.4. Các tính năng của Java (3)
Đơn giản
Network capable
3.4. Các tính năng của Java (3)
Java có 50 từ khóa
39
40
3.4. Các tính năng của Java (4)
3.4. Các tính năng của Java (5)
Bảo mật
41
Đa luồng (Multi-threaded)
Khả chuyển (Portable)
42
7
8/24/2011
3.4. Các tính năng của Java (6)
3.5. Các kiểu chương trình Java
Các môi trường phát triển
Java Development Kit
Integrated Development Environments (IDEs):
Ứng dụng (Application)
Applet
43
44
Nội dung
3.5. Các kiểu chương trình Java (2)
Ứng dụng Web (Web application)
Lập trình hướng đối tượng
Công nghệ hướng đối tượng
Ngôn ngữ lập trình Java
Ví dụ và bài tập
1.
2.
3.
4.
45
46
Ví dụ 1 - HelloWorld
Ví dụ 1 (tiếp)
// HelloWorld.java
// Chuong trinh hien thi dong chu “Hello World”
public class HelloWorld {
/* Phuong thuc main se duoc goi dau tien
trong bat cu ung dung Java nao*/
public static void main(String args[]){
System.out.println( “Hello World!" );
} // ket thuc phuong thuc main
} // ket thuc lop HelloWorld
Chú thích (Comment)
Java phân biệt chữ hoa chữ thường
Từ khóa có sẵn của Java:
47
class: Khai báo lớp
public: Quy định phạm vi truy cập
Tên lớp chứa hàm main phải trùng với tên
file .java.
48
8
8/24/2011
Biến môi trường
Cài đặt và chạy thử chương trình Java
Bước 1: Cài đặt j2sdk1.5/6/7, cài đặt các biến môi trường
(nếu dùng cmd)
Bước 2: Cài trình soạn thảo
TextPad/JCreator/NetBean/Eclipse…
Bước 3: Lập trình/Viết mã nguồn
Bước 4: Dịch
cmd: javac HelloWorld.java
Textpad: Ctrl + 1
JCreator: F7 hoặc Build Build Project/File
Bước 5: Chạy chương trình
cmd: java HelloWorld.class
Textpad: Ctrl + 2
JCreator: F5 hoặc Run Run Project/File
PATH = …;C:\Program Files\Java\jdk1.6\bin
CLASSPATH = C:\Program
Files\Java\jdk1.6\lib;.;C:\Program
Files\Java\jdk1.6\include
49
50
Ví dụ 2 - GUI
import javax.swing.JOptionPane;
public class FirstDialog{
public static void main(String[] args){
JOptionPane.showMessageDialog(null,
”Xin chao ban!”);
System.exit(0);
}
}
51
52
Ví dụ 3 – Nhập, xuất dữ liệu
import javax.swing.JOptionPane;
public class HelloNameDialog{
public static void main(String[] args){
String result;
result = JOptionPane.showInputDialog(“Hay nhap
ten ban:”);
JOptionPane.showMessageDialog(null,
”Xin chao “+ result + “!”);
System.exit(0);
}
}
53
9
8/24/2011
Mục tiêu bài học
Bộ môn Công nghệ Phần mềm
Viện CNTT & TT
Trường Đại học Bách Khoa Hà Nội
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Bài 02. Cú pháp Java cơ bản
Nêu được các quy ước đặt tên trong các chương
trình Java, tạo ra các định danh hợp lệ
Mô tả các kiểu dữ liệu cơ bản trong Java và
cách sử dụng
Các toán tử
Giải thích về phạm vi của biến
Sử dụng các câu lệnh điều khiển, cấu trúc điều
kiện, cấu trúc lặp và rẽ nhánh
Khai báo, khởi tạo các biến và mảng trong Java
2
Nội dung
1.
2.
3.
4.
5.
Nội dung
Định danh
Các kiểu dữ liệu
Toán tử
Cấu trúc điều khiển
Mảng
1.
2.
3.
4.
5.
Định danh
Các kiểu dữ liệu
Toán tử
Cấu trúc điều khiển
Mảng
3
4
1. Định danh
1. Định danh (2)
Định danh:
5
Quy ước với định danh (naming convention):
6
1
8/24/2011
1. Định danh (3)
Nội dung
Literals
Từ khóa (keyword)
Từ dành riêng (reserved for future use)
1.
2.
3.
4.
5.
Định danh
Các kiểu dữ liệu
Toán tử
Cấu trúc điều khiển
Mảng
7
2. Các kiểu dữ liệu
8
2.1. Kiểu dữ liệu nguyên thủy
Hai loại:
9
a. Số nguyên
10
b. Số thực
11
12
2
8/24/2011
c. Ký tự
d. Giá trị logic
13
14
2.2. Giá trị hằng (literal)
a. Số nguyên
Hệ cơ số 8 (Octals)
Hệ cơ số 16 (Hexadecimals)
Literals
integer…………..7
floating point…7.0f
boolean……….true
character……….'A'
string………….."A"
15
16
b. Số thực
c. boolean, ký tự và xâu ký tự
float
double
e (hoặc E):
17
boolean:
Ký tự:
Xâu ký tự:
18
3
8/24/2011
d. Escape sequence
2.3. Chuyển đổi kiểu dữ liệu (Casting)
Các ký tự điều khiển nhấn phím
Hiển thị các ký tự đặc biệt trong xâu
hẹp rộng
Rộng hẹp
int a, b;
short c;
a = b + c;
int d;
short e;
e = (short)d;
19
20
2.4. Khai báo và khởi tạo biến
double f;
long g;
f = g;
g = f;
Chú thích
Các biến đơn (biến không phải là mảng) cần
phải được khởi tạo trước khi sử dụng trong
các biểu thức
Java hỗ trợ ba kiểu chú thích
21
22
Câu lệnh
Nội dung
1.
2.
3.
4.
5.
23
Định danh
Các kiểu dữ liệu
Toán tử
Cấu trúc điều khiển
Mảng
24
4
8/24/2011
3. Toán tử (Operators)
Thứ tự ưu tiên của toán tử
Java cung cấp nhiều dạng
toán tử
Cho biết toán tử nào thực hiện trước – được
xác định bởi các dấu ngoặc đơn hoặc theo
ngầm định
25
26
Nội dung
1.
2.
3.
4.
5.
4.1. Lệnh if - else
Định danh
Các kiểu dữ liệu
Toán tử
Cấu trúc điều khiển
Mảng
Cú pháp
27
Ví dụ
28
4.2. Lệnh switch - case
class CheckNumber
{
public static void main(String args[])
{
int num =10;
if (num %2 == 0)
System.out.println (num+ “la so chan”);
else
System.out.println (num + “la so le”);
}
}
29
case a
[true]
[false]
case a
action(s)
break
case b
action(s)
break
case z
action(s)
break
[true]
case b
[false
]
.
.
.
[true]
case z
[false
]
default
action(s)
30
5
8/24/2011
Ví dụ
switch (day)
case 0:
case 1:
rule =
break;
case 2:
…
case 6:
rule =
break;
default:
rule =
}
4.3. Vòng lặp while và do while
{
“weekend”;
action state
int x = 2;
while (x < 2) {
x++;
System.out.println(x);
}
“weekday”;
[true]
condition
[false]
int x = 2;
do {
x++;
System.out.println(x);
} while (x < 2);
“error”;
31
32
4.4. Vòng lặp for
Ví dụ - vòng lặp for
Ví dụ:
class ForDemo
{
public static void main(String args[])
{
int i=1, sum=0;
for (i=1;i<=10;i+=2)
sum+=i;
System.out.println (“Sum of first five
old numbers is “ + sum);
}
}
for (int index = 0; index < 10; index++) {
System.out.println(index);
}
33
34
Vòng lặp for và while
4.5. Các lệnh thay đổi cấu trúc điều khiển
break
int sum = 0;
for (int index = 1;index <= 10;index++)
{
sum += index;
}
Có hai dạng:
int sum = 0;
int index = 1;
while (index <= 10) {
sum += index;
index++;
}
35
36
6
8/24/2011
Ví dụ - break và continue
4.5. Các lệnh thay đổi cấu trúc điều khiển (2)
continue
public int myMethod(int x) {
int sum = 0;
outer: for (int i=0; i
inner: for (int j=i; j
sum++;
if (j==1) continue;
if (j==2) continue outer;
if (i==3) break;
if (j==4) break outer;
}
}
return sum;
}
37
38
4.6. Phạm vi biến
Nội dung
1.
2.
3.
4.
5.
Định danh
Các kiểu dữ liệu
Toán tử
Cấu trúc điều khiển
Mảng
39
40
5. Mảng (array)
5.1. Khai báo và khởi tạo mảng
Ví dụ:
char c[] = new char[12];
Khai báo, khởi tạo giá trị ban đầu:
Nếu không khởi tạo nhận giá trị mặc định
variableName
reference
Array or Object
41
42
7
8/24/2011
5.1. Khai báo và khởi tạo mảng (2)
Ví dụ - mảng
Tên của mảng (tất
cả các thành phần
trong mảng có
cùng tên, c)
c.length cho biết
c.length:
độ dài của mảng c
Chỉ số (truy nhập đến
các thành phần của
mảng thông qua chỉ
số)
c[ 0 ]
-45
c[ 1 ]
6
c[ 2 ]
0
c[ 3 ]
72
c[ 4 ]
1543
c[ 5 ]
-89
c[ 6 ]
0
c[ 7 ]
62
c[ 8 ]
-3
c[ 9 ]
1
c[ 10 ]
6453
c[ 11 ]
78
Ví dụ:
int MAX = 5;
boolean bit[] = new boolean[MAX];
float[] value = new float[2*3];
int[] number = {10, 9, 8, 7, 6};
System.out.println(bit[0]);
System.out.println(value[3]);
System.out.println(number[1]);
43
44
5.2. Mảng nhiều chiều
5.2. Mảng nhiều chiều (2)
Column 0
Bảng với các dòng và cột
Row 0
Thường sử dụng mảng hai chiều
Row 1
Row 2
Column 1
Column 2
Column 3
b[ 0 ][ 0 ] b[ 0 ][ 1 ] b[ 0 ][ 2 ] b[ 0 ][ 3 ]
b[ 1 ][ 0 ] b[ 1 ][ 1 ] b[ 1 ][ 2 ] b[ 1 ][ 3 ]
b[ 2 ][ 0 ] b[ 2 ][ 1 ] b[ 2 ][ 2 ] b[ 2 ][ 3 ]
Chỉ số cột
Chỉ số hàng
Tên mảng
45
46
8
8/24/2011
Mục tiêu bài học
Bộ môn Công nghệ Phần mềm
Viện CNTT & TT
Trường Đại học Bách Khoa Hà Nội
Nêu được bản chất, vai trò của trừu tượng hóa
Giải thích về đóng gói và che giấu thông tin
Xây dựng lớp
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Bài 03. Đóng gói và xây dựng lớp,
tạo và sử dụng đối tượng
Định nghĩa lớp, thực hiện ẩn
Tạo các phương thức, các trường/thuộc tính
Tạo và sử dụng đối tượng
Phương thức khởi tạo
Khai báo và khởi tạo đối tượng
Sử dụng đối tượng
2
Nội dung
1.
2.
3.
Nội dung
Trừu trượng hóa dữ liệu
Đóng gói và xây dựng lớp
Tạo và sử dụng đối tượng
1.
2.
3.
Trừu trượng hóa dữ liệu
Đóng gói và xây dựng lớp
Tạo và sử dụng đối tượng
3
4
1.1. Trừu tượng hóa
2 loại trừu tượng hóa
1.1. Trừu tượng hóa (2)
Trừu tượng hóa điều khiển
Trừu tượng hóa dữ liệu
1
8/24/2011
1.2. Trừu tượng hóa dữ liệu trong OOP
Đối tượng trong thực tế phức tạp
7
8
1.2. Trừu tượng hóa dữ liệu (3)
1.2. Trừu tượng hóa dữ liệu (2)
Any model that includes the most important,
essential, or distinguishing aspects of
something while suppressing or ignoring less
important, immaterial, or diversionary details.
The result of removing distinctions so as to
emphasize commonalties (Dictionary of
Object Technology, Firesmith, Eykholt,
1995).
Tập hợp các thể hiện của
các thực thể thành các nhóm
có chung các thuộc tính
9
10
11
12
2
8/24/2011
1.3. Lớp vs. Đối tượng
13
14
Biểu diễn lớp trong UML
Thuộc tính (attribute) là gì?
3 thành phần:
Professor
- name
- employeeID : UniqueId
- hireDate
- status
- discipline
- maxLoad
Student
- name
- address
- studentID
- dateOfBirth
+ submitFinalGrade()
+ acceptCourseOffering()
+ setMaxLoad()
+ takeSabbatical()
+ teachClass()
Lớp và đối tượng trong UML
:Student
Student
- name
- address
- studentID
- dateOfBirth
- name = “M. Modano”
- address = “123 Main St.”
- studentID = 9
- dateOfBirth = “03/10/1967”
Nội dung
1.
2.
3.
Trừu trượng hóa dữ liệu
Đóng gói và xây dựng lớp
Tạo và sử dụng đối tượng
sv2:Student
- name = “D. Hatcher”
- address = “456 Oak Ln.”
- studentID = 2
- dateOfBirth = “12/11/1969”
18
3
8/24/2011
2.1. Đóng gói (Encapsulation)
2.1. Đóng gói (2)
Một đối tượng có hai khung nhìn:
Client
BankAccount
- owner: String
- balance: double
Methods
+ debit(double): boolean
+credit(double)
Data
19
20
2.1. Đóng gói (3)
2.2. Xây dựng lớp
Thông tin cần thiết để định nghĩa
một lớp
BankAccount
- owner: String
- balance: double
Input
Don’t know how
it works, but it
works!
+ debit(double): boolean
+credit(double)
Output
21
22
2.2. Xây dựng lớp (2)
2.2. Xây dựng lớp (3)
Lớp đóng gói các thành viên (member)
Các lớp được nhóm lại thành package
String owner;
double balance;
23
24
4
8/24/2011
2.2.1. Khai báo lớp
Ví dụ - Khai báo lớp
Cú pháp khai báo:
package oop.k52.cnpm;
package tenpackage;
chi_dinh_truy_cap class TenLop {
public class Student {
// Than lop
}
…
}
25
26
Ví dụ: private
2.2.2. Khai báo thành viên của lớp
public
Không có
private
Cùng lớp
Cùng gói
Khác gói
class Student{
private String name;
public String getName() {
return this.name;
}
public void setName(String name)
{
this.name = name;
}
}
27
Ví dụ: private (2)
class Student{
private String name;
public String getName() {
return this.name;
}
public void setName(String name)
{
this.name = name;
}
}
class Manager{
private Student[] students;
public initianize()
{
students[0] = new Students();
//student.name = “Hung”; error
student.setName(“Hung”);
}
}
28
a. Thuộc tính
Các thuộc tính phải được khai báo bên trong lớp
Student
- name
- address
- studentID
- dateOfBirth
Nguyễn Thu Hương
Nguyễn Hoàng Nam
Hải Phòng…
…
Hà Nội…
29
30
5
8/24/2011
a. Thuộc tính (2)
b. Phương thức
Thuộc tính có thể được khởi tạo khi khai báo
BankAccount
- owner: String
- balance: double
+ debit(double): boolean
+credit(double)
boolean
31
32
* Kiểu dữ liệu trả về
* Chữ ký phương thức (signature)
Lệnh return
33
34
Ví dụ
c. Thành viên hằng
public Boolean checkOdd(int i)
{
if (i %2 ==0)
return true;
else
return false;
}
Ví dụ:
final double PI = 3.141592653589793;
public final int VAL_THREE = 39;
private final int[] A = { 1, 2, 3, 4, 5, 6 };
public Boolean checkOdd(int i)
{
return true;
return false;
}
35
6
8/24/2011
package com.megabank.models;
public class BankAccount {
private String owner;
private double balance;
2.3. Che giấu dữ liệu (Data hiding)
public boolean debit(double amount){
if (amount > balance)
return false;
else {
balance -= amount; return true;
}
}
public void credit(double amount){
balance += amount;
}
37
}
38
Cơ chế che giấu dữ liệu
39
BankAccount
- owner: String
- balance: double
+ debit(double): boolean
+credit(double)
40
41
42
Cơ chế che giấu dữ liệu (2)
Accessor (getter):
Mutator (setter):
7
8/24/2011
Nội dung
1.
2.
3.
3.1. Khởi tạo dữ liệu
Trừu trượng hóa dữ liệu
Đóng gói và xây dựng lớp
Tạo và sử dụng đối tượng
Student
- name
- address
- studentID
- dateOfBirth
Nguyễn Thu Hương
Nguyễn Hoàng Nam
Tạo
Hủy
…
44
3.2. Phương thức khởi tạo
Khởi tạo và hủy bỏ đối tượng
Hải Phòng…
Hà Nội…
43
Mục đích chính?
Student
- name
- address
- studentID
- dateOfBirth
Nguyễn Thu Hương
Nguyễn Hoàng Nam
Hải Phòng…
…
Hà Nội…
45
46
3.2. Phương thức khởi tạo (2)
3.2. Phương thức khởi tạo (3)
Ví dụ:
public BankAccount(String o, double b){
owner = o;
balance = b;
}
47
Các chỉ định truy cập có thể dùng?
Được xem như là thành viên của lớp?
48
8