Bài giảng Lập trình Java - Nguyễn Việt Hà

Nội dung

„Lịch sửcủa Java

„Cácđặctrưng cơbản

„Java applications và Java applets

„Tạoứng dụng Java đơn giản

pdf334 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 2357 | Lượt tải: 1download
Tóm tắt nội dung Bài giảng Lập trình Java - Nguyễn Việt Hà, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
háp (tt)
„ CompositeGraphic là
…một danh sách nên nó có add(), remove() và count()
…Graphic nên nó còn có rotate(), move() và setColor()
„ Các thao tác đó đối với một đối tượng hợp 
thành sử dụng một vòng lặp ‘for all’
„ Thao tác thực hiện ngay cả với trường hợp 
thành phần của Composite lại là một Composite 
khác - cấu trúc dữ liệu dạng cây
„ Có khả năng giữ thứ tự của các thành phần
Nguyên lý thiết kế… 37Nguyễn Việt Hà
Giải pháp (tt)
„Ví dụ tạo một đối tượng hợp thành:
CompositeGraphic cg;
cg = new CompositeGraphic();
cg.add(new Line(0,0,100,100));
cg.add(new Circle(50,50,100));
cg.rotate(90);
Nguyên lý thiết kế… 38Nguyễn Việt Hà
Sơ đồ lớp
„ Kế thừa đơn
„ Lớp cơ sở (root) chứa phương thức
add(), remove()
Nguyên lý thiết kế… 39Nguyễn Việt Hà
Ứng dụng
„ Được dùng trong hầu hết các hệ thống 
HĐT
„ Chương trình soạn thảo
„ Giao diện đồ họa
„ Cây phân tích cho biên dịch (một khối là
một tập các lệnh/lời gọi hàm/các khối 
khác)
Nguyên lý thiết kế… 40Nguyễn Việt Hà
Proxy Pattern
„ Các đối tượng có kích thước lớn, chỉ nên nạp 
vào bộ nhớ khi thực sự cần thiết; hay các đối 
tượng ở vùng địa chỉ khác (remote objects)
„ Ví dụ: Xây dựng một trình soạn thảo văn bản 
có nhúng các đối tượng Graphic
… Vấn đề đặt ra: Việc nạp các đối tượng Graphic 
phức tạp thường rất tốn kém, trong khi văn bản 
cần được mở nhanh
…Giải pháp: sử dụng ImageProxy
Nguyên lý thiết kế… 41Nguyễn Việt Hà
Sơ đồ lớp
Nguyên lý thiết kế… 42Nguyễn Việt Hà
Áp dụng 
„ Proxy được sử dụng khi nào cần thiết phải có
một tham chiếu thông minh đến một đối tượng 
hơn là chỉ sử dụng một con trỏ đơn giản
… cung cấp đại diện cho một đối tượng ở một không 
gian địa chỉ khác (remote proxy).
… trì hoãn việc tạo ra các đối tượng phức tạp (virtual 
proxy).
… quản lý truy cập đến đối tượng có nhiều quyền truy 
cập khác nhau (protection proxy).
… smart reference
Nguyên lý thiết kế… 43Nguyễn Việt Hà
Strategy
„ Chương trình cần chuyển đổi động giữa 
các thuật toán
„ Ví dụ, chương trình soạn thảo sử dụng 
vài thuật toán hiển thị với các hiệu 
ứng/lợi ích khác nhau
Nguyên lý thiết kế… 44Nguyễn Việt Hà
Yêu cầu
„ Thuật toán phức tạp và sẽ không có lợi khi 
cài đặt chúng trực tiếp trong lớp sử dụng 
chúng
…ví dụ: việc cài thuật toán hiển thị vào lớp 
Document là không thích hợp
„ Cần thay đổi động giữa các thuật toán
„ Dễ dàng thêm thuật toán mới
Nguyên lý thiết kế… 45Nguyễn Việt Hà
Giải pháp
„ Định nghĩa lớp trừu tượng để biểu diễn 
thuật toán:
class Renderer {
abstract void render(Document d);
}
„ Mỗi thuật toán là một lớp dẫn xuất
FastRenderer, TexRenderer, …
Nguyên lý thiết kế… 46Nguyễn Việt Hà
Giải pháp (tt)
„ Đối tượng "document" tự chọn thuật toán vẽ:
class Document {
render() {
renderer.render(this);
}
setFastRendering() {
renderer = new FastRenderer();
}
private Renderer renderer;
}
Nguyên lý thiết kế… 47Nguyễn Việt Hà
Sơ đồ lớp
Nguyên lý thiết kế… 48Nguyễn Việt Hà
Ứng dụng
„ Chương trình vẽ/soạn thảo
„ Tối ưu biên dịch
„ Chọn lựa các thuật toán heuristic khác 
nhau (trò chơi...)
„ Lựa chọn các phương thức quản lý bộ
nhớ khác nhau
Một số lớp cơ sở
Một số lớp cơ sở 2Nguyễn Việt Hà
Nội dung
„ Các lớp dữ liệu nguyên thủy
„ Xâu ký tự
„ Lớp Math
„ Mảng
„ Các lớp Container
Một số lớp cơ sở 3Nguyễn Việt Hà
Tài liệu tham khảo
„ Bruce Eckel, Thinking in Java, chapter 11
„ Deitel, Java – How to program, chapter 7, 
11, 20
„ Đoàn Văn Ban, Lập trình hướng đối tượng 
với Java, NXB Khoa học kỹ thuật, chương 
6.
Một số lớp cơ sở 4Nguyễn Việt Hà
Một số lớp cơ bản
Object
Boolean Character Void Number Math String StringBuffer
IntegerShortByte Long Float Double
...
Một số lớp cơ sở 5Nguyễn Việt Hà
Lớp Object
„ Class getClass(): trả lại tên lớp của
đối tượng hiện thời.
„ boolean equals(Object): so sánh đối
tượng, thường được định nghĩa lại.
„ String toString(): trả lại biểu diễn
văn bản của đối tượng, thường được định
nghĩa lại.
Một số lớp cơ sở 6Nguyễn Việt Hà
Person p = new Person(”John”);
Class c = p.getClass();
System.out.println(c);
----
class Person
Một số lớp cơ sở 7Nguyễn Việt Hà
Các lớp dữ liệu nguyên thủy
„ Các phương thức tiện ích
…valueOf(String s): trả đối tượng thuộc
kiểu tương ứng
…typeValue(): trả giá trị nguyên thủy tương 
ứng
…static parseType(String s): trả giá trị
nguyên thủy tương ứng
„ Hằng số
…Type.MAX_VALUE, Type.MIN_VALUE
Một số lớp cơ sở 8Nguyễn Việt Hà
Lớp Character
„ Các phương thức
… static boolean isUppercase(char ch)
… static boolean isLowercase(char ch)
… static boolean isDigit(char ch)
… static boolean isLetter(char ch)
… static boolean isLetterOrDigit(char ch)
… static char toUpperCase(char ch)
… static char toLowerCase(char ch)
Một số lớp cơ sở 9Nguyễn Việt Hà
Lớp String
„ Xâu ký tự không thay đổi được nội dung
„ Khởi tạo
…String(String), 
String(StringBuffer)
…String(byte[]), String(char[])
„ Phương thức
…int length(): kích thước của xâu
…char charAt(int index): ký tự ở vị trí
index
Một số lớp cơ sở 10Nguyễn Việt Hà
Lớp String
„ So sánh
…boolean equals(String)
…boolean equalsIgnoreCase(String)
…boolean startWith(String)
…boolean endWith(String)
…int compareTo(String)
Một số lớp cơ sở 11Nguyễn Việt Hà
Lớp String
„ Chuyển đổi
…String toUpperCase()
…String toLowerCase()
„ Ghép xâu
…String concat(String)
… toán tử “+”
Một số lớp cơ sở 12Nguyễn Việt Hà
Lớp String
„ Tìm kiếm
…int indexOf(char), int 
indexOf(char ch, int from)
…int indexOf(String), int 
indexOf(String s, int from)
…int lastIndexOf(char), 
lastIndexOf(char, int)
…lastIndexOf(String), 
lastIndexOf(String, int)
Một số lớp cơ sở 13Nguyễn Việt Hà
Lớp String
„ Thay thế
…String replace(char ch, char 
new_ch)
„ Trích xâu
…String trim(): loại bỏ ký tự trắng
…String substring(int startIndex)
…String substring(int startIdx, int 
endIdx)
Một số lớp cơ sở 14Nguyễn Việt Hà
Lớp StringBuffer
„ Xâu ký tự thay đổi được nội dung
„ Khởi tạo
… StringBuffer(String)
… StringBuffer(int length)
… StringBuffer(): đặt kích thước mặc định 16
„ Các phương thức
… int length(), void setLength()
… char charAt(int index)
… void setCharAt(int index, char ch)
… String toString()
Một số lớp cơ sở 15Nguyễn Việt Hà
Lớp StringBuffer
„ Thêm, xóa
…append(String), append(type)
…insert(int offset, String s), 
insert(int offset, char[] chs), 
insert(int offset, type t)
…delete(int start, int end): xóa xâu 
con
…delete(int index): xóa một ký tự
…reverse(): đảo ngược
Một số lớp cơ sở 16Nguyễn Việt Hà
Lớp Math
„ Hằng số
… Math.E
… Math.PI
„ Các phương thức static
… type abs(type)
… double ceil(double), double floor(double)
… int round(float), long round(double)
… type max(type, type), type min(type, type)
… double random(): sinh số ngẫu nhiên trong đoạn
[0.0,1.0]
Một số lớp cơ sở 17Nguyễn Việt Hà
Lớp Math
„ Lũy thừa
… double pow(double, double)
… double exp(double)
… double log(double)
… double sqrt(double)
„ Lượng giác
… double sin(double)
… double cos(double)
… double tan(double)
Một số lớp cơ sở 18Nguyễn Việt Hà
Mảng
„ Mảng là đối tượng
… chứa một tập các đối tượng khác
… cần tạo ra trước khi sử dụng (new)
Ví dụ:
int a[];
a = new int[10];
for (int i=0; i<a.length; i++) a[i] = i*i;
int b[] = {2, 3, 5, 7};
a = b;
int m, n[];
double[] arr1, arr2;
Một số lớp cơ sở 19Nguyễn Việt Hà
Truyền tham số và nhận giá trị trả lại
int[] myCopy(int[] a) {
int b[] = new int[a.length];
for (i=0; i<a.length; i++)
b[i] = a[i];
return b;
}
...
int a[] = {0, 1, 1, 2, 3, 5, 8};
int b[] = myCopy(a);
Một số lớp cơ sở 20Nguyễn Việt Hà
Mảng nhiều chiều
int a[][];
a = new int[10][20];
a[2][3] = 10;
for (int i=0; i<a[0].length; i++) 
a[0][i] = i;
int b[][] = { {1 , 2}, {3, 4} };
int c[][] = new int[2][];
c[0] = new int[5];
c[1] = new int[10];
Một số lớp cơ sở 21Nguyễn Việt Hà
Copy mảng
„ System.arraycopy(src, s_off, 
des, d_off, len)
…src: mảng nguồn, s_off: offset của mảng
nguồn
…des: mảng đích, d_off: offset của mảng đích
…len: số phần tử cần copy
„ Copy nội dung của dữ liệu nguyên thủy, 
copy tham chiếu đối với đối tượng
Một số lớp cơ sở 22Nguyễn Việt Hà
Lớp Arrays
„ Nằm trong gói java.util
„ Cung cấp 4 phương thức static để làm
việc với mảng
…fill(): khởi tạo các phần tử của mảng với
một giá trị như nhau
…sort(): xắp xếp mảng
…equals(): so sánh hai mảng
…binarySearch(): tìm kiếm nhị phân trên 
mảng đã sắp xếp
Một số lớp cơ sở 23Nguyễn Việt Hà
So sánh mảng equals()
„ So sánh mảng dữ liệu nguyên thủy
„ Gọi phương thức equals() để so sánh mảng
đối tượng
----
int a[] = { 1, 3 , 2 , 4 };
int b[] = new int[a.length];
System.arraycopy(a,0,b,0,a.length);
System.out.println(Arrays.equals(a,b));
Một số lớp cơ sở 24Nguyễn Việt Hà
Sắp xếp mảng sort()
„ Làm việc với các mảng dữ liệu nguyên 
thủy
„ Làm việc với các lớp đối tượng có cài đặt
giao diện Comparable
…phương thức compareTo()
Một số lớp cơ sở 25Nguyễn Việt Hà
Các lớp tuyển tập (Container)
Tree Map
HashSet >
Sorted Set
Array List Vector LinkedList
>
Map
>
Sorted Map
>
List
HashMap
HashTable
>
Set
Tree Set
>
Collection
Một số lớp cơ sở 26Nguyễn Việt Hà
Iterator
„ Mẫu dùng để duyệt các phần tử của một 
tập hợp
„ Là một interface trong Java:
…hasNext()
…next()
… remove()
„ Các lớp Collection cài đặt Iterator
Một số lớp cơ sở 27Nguyễn Việt Hà
import java.util.*;
public class TestList {
static public void main(String args[]) {
Collection list = new LinkedList();
list.add(3);
list.add(2); 
list.add(1);
list.add(0);
list.add(“happy new year!");
Iterator i = list.iterator(); 
while (i.hasNext()) {
System.out.println(i.next());
}
}
}
Một số lớp cơ sở 28Nguyễn Việt Hà
import java.util.*;
public class Test {
static public void main(String args[]) {
List list = new LinkedList();
list.add(3);
list.add(2);
list.add(1);
list.add(0);
list.add("go!");
for (int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
}
}

File đính kèm:

  • pdfBài giảng Lập trình Java - Nguyễn Việt Hà.pdf
Tài liệu liên quan