Bài giảng Lập trình hướng đối tượng - Bài 4: Các kỹ thuật xây dựng lớp và sử dụng đối tượng

8/24/2011  
Mục tiêu bài học  
Nêu được bản chất, vai trò và biết sử dụng kỹ  
thuật chồng phương thức, chồng phương thức  
khởi tạo  
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  
Thành viên đối tượng, thành viên lớp  
Hiểu về cách thức quản lý bộ nhớ và đối tượng  
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG  
Bài 04. Các kỹ thuật xây dựng lớp  
và sử dụng đối tượng  
trong Java  
Nắm về cách thức truyền tham số phương thức  
Biết cách sử dụng package, một số lớp tiện ích  
trong Java: Wrapper class, Math, System, String  
vs. StringBuffer  
2
Nội dung  
Nội dung  
1. Chồng phương thức  
1. Chồng phương thức  
2. Thành viên ĐT và thành viên lớp  
3. Quản lý bộ nhớ trong Java  
4. Truyền tham số cho phương thức  
5. Một số lớp tiện ích trong Java  
2. Thành viên ĐT và thành viên lớp  
3. Quản lý bộ nhớ trong Java  
4. Truyền tham số cho phương thức  
5. Một số lớp tiện ích trong Java  
3
4
1.1. Chồng phương thức  
1.1. Chồng phương thức (2)  
Chồng phương thức (Method Overloading)  
Ví dụ 1:  
Phương thức println() trong System.out.println()  
5
6
1
8/24/2011  
1.1. Chồng phương thức (3)  
Một số chú ý với chồng phương thức  
Ví dụ 2:  
class MyDate  
{
int year, month, day;  
public boolean setMonth(int m) { …}  
public boolean setMonth(String s)  
{ …}  
}
public class Test{  
public static void main(String args[]){  
MyDate new MyDate();  
d
=
d.setMonth(9);  
d.setMonth(”September”);  
}
}
7
8
Thảo luận  
1.2. Chồng phương thức khởi tạo  
void prt(String s) { System.out.println(s);  
}
Trong nhiều tình huống khác nhau cần khởi  
tạo đối tượng theo nhiều cách khác nhau  
void f2(short x) { prt("f3(short)");  
void f2(int x) { prt("f3(int)"); }  
}
void f2(long x) { prt("f5(long)");  
}
void f2(float x) { prt("f5(float)");  
}
Điều gì xảy ra nếu thực hiện:  
f2(5);  
char x=‘a’; f2(x);  
byte y=0; f2(y);  
float z = 0; f2(z);  
Điều gì xảy ra nếu gọi f2(5.5)?  
9
10  
Ví dụ  
1.3. Từ khóa this  
public class BankAccount{  
private String owner;  
private double balance;  
public BankAccount(){owner = “noname”;}  
public BankAccount(String o, double b){  
owner = o; balance = b;  
}
}
public class Test{  
public static void main(String args[]){  
BankAccount acc1 = new BankAccount();  
BankAccount acc2 =  
new BankAccount(“Thuy”, 100);  
}
}
11  
12  
2
8/24/2011  
Ví dụ  
public class Ship  
//(cont.)  
private double degreeToRadian(double degrees)  
return(degrees * Math.PI  
}
public void move()  
move(1);  
{
{
/ 180.0);  
private double x=0.0, y=0.0  
private double speed=1.0, direction=0.0;  
public String name;  
{
}
public Ship(String name)  
this.name name;  
{
=
public void move(int steps)  
double angle degreesToRadians(direction);  
x = (double)steps*speed*Math.cos(angle);  
+ (double)steps*speed*Math.sin(angle);  
{
}
=
public Ship(String name, double x, double y)  
{
x
= y  
+
this(name); this.x x; this.y = y;  
=
y
}
}
public Ship(String name, double x, double y,  
public void printLocation()  
System.out.println(name + " is at ("  
+ x "," ").");  
{
double speed, double direction)  
this(name, x, y);  
{
this.speed  
= speed;  
+
+ y +  
this.direction = direction;  
}
}
} //end of Ship class  
13  
15  
17  
14  
16  
18  
//continue…  
Nội dung  
2.1. Thành viên static  
1. Chồng phương thức  
2. Thành viên ĐT và thành viên  
lớp  
3. Quản lý bộ nhớ trong Java  
4. Truyền tham số cho phương thức  
5. Một số lớp tiện ích trong Java  
Ví dụ - sử dụng thuộc tính và phương  
thức static lớp JOptionPane  
Ví dụ lớp JOptionPane trong javax.swing  
JOptionPane.showMessageDialog(null,"Ban da thao tac  
loi", "Thong bao loi", JOptionPane.ERROR_MESSAGE);  
Thuộc tính  
JOptionPane.showConfirmDialog(null,"Ban co chac chan  
muon thoat?", "Hay lua chon",  
JOptionPane.YES_NO_OPTION);  
3
8/24/2011  
Ví dụ - sử dụng thuộc tính và phương  
thức static lớp JOptionPane (2)  
2.1. Thành viên static (2)  
Thay đổi giá trị của một thành viên static  
Object[] options = { "OK", "CANCEL" };  
trong một đối tượng của lớp?  
JOptionPane.showOptionDialog(null,“Nhan  
OK de tiep tuc", "Canh bao",  
JOptionPane.DEFAULT_OPTION,  
JOptionPane.WARNING_MESSAGE,null,option  
s,options[0]);  
19  
20  
Ví dụ 2  
Ví dụ 1  
class TestStatic{  
public static int iStatic;  
public int iNonStatic;  
}
public class Demo {  
int i = 0;  
void tang(){ i++; }  
public class TestS  
public static void main(String[] args)  
TestStatic obj1 new TestStatic();  
obj1.iStatic 10; obj1.iNonStatic  
{
public static void main(String[] args) {  
{
=
tang();  
=
=
11;  
System.out.println("Gia tri cua i la" + i);  
System.out.println(obj1.iStatic+”,”+obj1.iNonStatic);  
TestStatic obj2 new TestStatic();  
System.out.println(obj2.iStatic+”,”+obj2.iNonStatic);  
obj2.iStatic 12;  
=
}
}
=
System.out.println(obj1.iStatic+”,”+obj1.iNonStatic);  
}
}
21  
22  
2.2. Thành viên hằng  
Instance member vs. Class member  
Ví dụ:  
Thành viên đối tượng  
Thành viên lớp  
final double PI = 3.141592653589793;  
public final int VAL_THREE = 39;  
private final int[] A = { 1, 2, 3, 4, 5, 6 };  
23  
24  
4
8/24/2011  
Nội dung  
3. Quản lý bộ nhớ trong Java  
Java không sử dụng con trỏ  
1. Chồng phương thức  
2. Thành viên ĐT và thành viên lớp  
3. Quản lý bộ nhớ trong Java  
4. Truyền tham số cho phương thức  
5. Một số lớp tiện ích trong Java  
25  
27  
29  
26  
3.1. Bộ nhớ Heap  
3.1. Bộ nhớ Heap  
String s = new String(“hello”);  
String s = new String(“hello”);  
String t = s;  
28  
3.2. Bộ nhớ Stack  
3.3. Bộ thu gom rác (Garbage Collector)  
String s = new String(“hello”);  
String t = s;  
Tiến trình chạy ngầm  
int i = 201;  
int j = i;  
i
201  
201  
j
30  
5
8/24/2011  
Phương thức void finalize()  
3.4. So sánh đối tượng  
Lớp nào cũng có phương thức finalize()  
Dữ liệu thường với toán tử ==?  
31  
32  
3.4. So sánh đối tượng (2)  
3.4. So sánh đối tượng (3)  
Đối với các đối tượng, toán tử == có ý nghĩa  
khác  
Bất kỳ đối tượng nào cũng có phương thức  
equals  
Ví dụ:  
33  
34  
Ví dụ == và equals – Lớp Integer  
Ví dụ 3 – equals của lớp tự viết  
class Value  
int i;  
}
public class EqualsMethod2  
public static void main(String[] args)  
{
public class Equivalence {  
public static void main(String[] args) {  
Integer n1 = new Integer(47);  
Integer n2 = new Integer(47);  
System.out.println(n1 == n2);  
System.out.println(n1.equals(n2));  
}
{
{
Value v1  
Value v2  
=
=
new Value();  
new Value();  
v1.i  
= v2.i = 100;  
System.out.println(v1.equals(v2));  
}
}
}
35  
36  
6
8/24/2011  
Nội dung  
4. Truyền tham số cho phương thức  
Có thể sử dụng bất kỳ kiểu dữ liệu nào cho  
tham số của phương thức hoặc constructor  
1. Chồng phương thức  
2. Thành viên ĐT và thành viên lớp  
3. Quản lý bộ nhớ trong Java  
4. Truyền tham số cho phương  
thức  
5. Một số lớp tiện ích trong Java  
37  
39  
41  
38  
4.1. Với kiểu dữ liệu tham trị  
4. Truyền tham số cho phương thức (2)  
Các giá trị nguyên thủy không thể thay đổi  
khi truyền như một tham số  
Java: pass-by-value  
40  
Ví dụ  
4.2. Với kiểu dữ liệu tham chiếu  
public class Point {  
private double x;  
private double y;  
public Point() { }  
public Point(double x, double y) {  
this.x = x; this.y = y;  
}
public void setX(double x) { this.x = x; }  
public void setY(double y) { this.y = y; }  
public void printPoint() {  
System.out.println("X: " + x + " Y: " + y);  
}
}
42  
7
8/24/2011  
public class Test {  
public static void tricky(Point arg1, Point  
arg2) {  
arg1.setX(100); arg1.setY(100);  
Point temp = arg1;  
arg1 = arg2; arg2 = temp;  
}
public static void main(String [] args) {  
Point pnt1 = new Point(0,0);  
Point pnt2 = new Point(0,0);  
pnt1.printPoint(); pnt2.printPoint();  
System.out.println(); tricky(pnt1, pnt2);  
pnt1.printPoint(); pnt2.printPoint();  
}
}
43  
44  
Nội dung  
4.3. Truyền số lượng tham số tùy ý  
Được gọi là varargs.  
Ví dụ:  
1. Chồng phương thức  
2. Thành viên ĐT và thành viên lớp  
3. Quản lý bộ nhớ trong Java  
4. Truyền tham số cho phương thức  
5. Một số lớp tiện ích trong Java  
System.out.printf ("%s: %d, %s\n",  
name, idnum, address);  
System.out.printf ("%s: %d, %s, %s,  
%s\n",  
name, idnum, address, phone,  
email);  
45  
46  
5.1. Package trong Java  
5.1. Package trong Java (2)  
Package giống như thư mục  
Tên đầy đủ của lớp:  
47  
48  
8
8/24/2011  
a. Tham chiếu giữa các lớp  
a. Tham chiếu giữa các lớp (2)  
Lệnh import:  
Ví dụ:  
Sử dụng lệnh importđể khai báo các package hoặc các  
public class HelloNameDialog{  
public static void main(String[] args){  
String result;  
lớp để khi sử dụng không cần nêu tên đầy đủ.  
result  
=
javax.swing.JOptionPane.showInputDialog  
(“Hay nhap ten ban:”);  
javax.swing.JOptionPane.showMessageDialog(null,  
”Xin chao “+ result “!”);  
+
}
}
49  
51  
53  
50  
b. Các package trong Java  
b. Các package trong Java (2)  
•java.applet  
•java.awt  
•java.beans  
•java.io  
•java.lang  
•java.math  
•java.net  
•java.nio  
•java.rmi  
•java.security  
•java.sql  
•javax.rmi  
•javax.security  
•javax.sound  
•javax.sql  
•javax.swing  
•javax.transaction  
•javax.xml  
•org.ietf.jgss  
Các package cơ bản trong Java  
java.lang  
java.util  
java.io  
•org.omg.CORBA  
•org.omg.CosNaming  
•org.omg.Dynamic  
•org.omg.IOP  
•org.omg.Messaging  
•org.omg.PortableInterceptor  
•org.omg.PortableServer  
•org.omg.SendingContext  
•org.omg.stub.java.rmi  
•org.w3c.dom  
•java.text  
•java.util  
•javax.accessibility  
•javax.crypto  
•javax.imageio  
•javax.naming  
•javax.net  
•javax.print  
52  
•org.xml  
b. Các package trong Java (3)  
5.2. Các lớp bao (Wrapper class)  
Các package cơ bản trong Java  
Mỗi kiểu dữ liệu nguyên thủy có một lớp  
tương ứng gọi là lớp bao:  
java.math  
java.sql  
javax.swing  
54  
9
8/24/2011  
5.2. Các lớp bao (2)  
a. Chuyển đổi kiểu dữ liệu (2)  
Ví dụ  
a. Chuyển đổi kiểu dữ liệu  
Sử dụng toString()  
Sử dụng <type>Value()  
Sử dụng parse<type>()và valueOf()  
55  
57  
59  
56  
b. Các hằng số  
58  
5.3. Xâu (String)  
double  
d
=
(new Integer(Integer.MAX_VALUE)).  
doubleValue();  
Kiểu String là một lớp và không phải là kiểu  
dữ liệu nguyên thủy  
System.out.println(d);  
String input  
int output  
=
"test 1-2-3";  
=
0;  
for (int index=0;index<input.length();index++) {  
char input.charAt(index);  
if (Character.isDigit(c))  
output output 10 + Character.digit(c, 10);  
c
=
=
*
}
System.out.println(output);  
60  
10  
8/24/2011  
a. Ghép xâu  
b. Các phương thức của xâu  
String name = "Joe Smith";  
name.toLowerCase();  
Toán tử +  
name.toUpperCase();  
"Joe Smith ".trim();  
Các kiểu dữ liệu cơ bản sử dụng trong lời gọi  
println() được chuyển đổi tự động sang kiểu  
String  
"Joe Smith".indexOf('e');  
"Joe Smith".length();  
"Joe Smith".charAt(5);  
"Joe Smith".substring(5);  
"Joe Smith".substring(2,5);  
61  
62  
c. So sánh hai xâu  
c. So sánh hai xâu (2)  
oneString.equals(anotherString)  
String s1  
=
new String(“Hello”);  
String s2  
=
s1;  
oneString.equalsIgnoreCase(anotherString)  
String s1  
String s2  
=
=
new String(“Hello”);  
new String(“Hello”);  
So sánh oneString == anotherStringsẽ gây nhập nhằng  
63  
64  
d. Điểm đặc biệt của String  
String Literal vs. String Object  
String s1  
String s2  
String s3  
String s4  
String s5  
=
=
=
=
=
"Hello";  
Khởi tạo String theo 2 cách:  
"Hello";  
Gán 1 giá trị literal  
s1;  
new String("Hello");  
new String("Hello");  
Dùng toán tử new (Không khuyến khích  
dùng)  
Ví dụ:  
String str1 = "Java is Hot";  
String str2 = new String("I'm cool");  
65  
66  
11  
8/24/2011  
5.4. StringBuffer  
String là kiểu bất biến:  
5.4. StringBuffer (2)  
StringBuffer là kiểu biến đổi:  
String s = new String(“hello”);  
String t = s;  
s = new String(“goodbye”);  
67  
69  
71  
68  
5.4. StringBuffer (3)  
5.4. StringBuffer (4)  
Tính biến đổi  
StringBuffer:  
Khi nào dùng?  
70  
5.4. StringBuffer (5)  
5.5. Lớp Math  
java.lang.Math cung cấp các  
thành phần static:  
72  
12  
8/24/2011  
5.5. Lớp Math (2)  
5.6. Lớp System  
Ví dụ :  
java.lang.System chứa nhiều hàm tiện ích  
hữu dụng  
Math.pow(Math.E,  
Math.sqrt(2.0*Math.PI))  
Hoặc:  
Math.exp(Math.sqrt(2.0*Math.PI))  
5.6. Lớp System (2)  
5.6. Lớp System (3)  
import java.util.Properties;  
public class PropertiesTest  
public static void main(String[] args)  
System.out.println(  
currentTimeMillis():  
exit():  
{
{
System.getProperty("path.separator"));  
System.out.println(  
System.getProperty("file.separator"));  
System.out.println(  
System.getProperty("java.class.path"));  
System.out.println(  
System.getProperty("os.name"));  
System.out.println(  
System.getProperty("os.version"));  
gc():  
Các phương thức liên quan đến thuộc tính của hệ  
thống:  
System.out.println(System.getProperty("user.dir"));  
System.out.println(System.getProperty("user.home"));  
System.out.println(System.getProperty("user.name"));  
}
}
13  
pdf 13 trang myanh 23680 Free
Bạn đang xem tài liệu "Bài giảng Lập trình hướng đối tượng - Bài 4: Các kỹ thuật xây dựng lớp và sử dụng đối tượng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_bai_4_cac_ky_thuat_xay_d.pdf