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

Tài Liệu Lập Trình Hướng Đối Tượng Full

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 (10.72 MB, 102 trang )

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; iinner: for (int j=i; jsum++;
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


×