Lập trình hướng đối tượng trong Java
Mỗi một chương trình máy tính đều gồm có 2 phần : phần mã lệnh và phần dữ liệu. Một số chương trình đặt trọng tâm ở phần mã lệnh, số khác đặt trọng tâm ở phần dữ liệu. Từ đó dẫn đến 2 mô hình quyết định nên cấu trúc của chương trình : một trả lời cho câu hỏi “Điều gì đang xảy ra”, và một cho “Cái gì đang chịu tác động”. Mô hình 1 gọi là mô hình hướng xử lý, nó mô tả như là một chương trình bao gồm một chuỗi các bước thực hiện (mã lệnh). Nhưng khi chương trình càng ngày càng lớn và phức tạp thì khó khăn để sử dụng mô hình thứ nhất.
Vì vậy mô hình thứ 2 được đưa ra, đó là mô hình hướng đối tượng. Chương trình của bạn sẽ xây dựng dựa vào dữ liệu và phần giao diện được định nghĩa cho phần dữ liệu đó. Mô hình này được mô tả như là dữ liệu điều khiển truy xuất đối với mã lệnh.
Ngôn ngữ lập trình hướng đối tượng có các khả năng sau :
- Mô phỏng thế giới thực một cách tự nhiên bởi các đối tượng và mối quan hệ giữa chúng, thuận tiện cho việc thiết kế hệ thống phức tạp
- Thừa kế mã có sẵn một cách dễ dàng, giúp tiết kiệm công sức và nâng cao năng suất của người lập trình, dễ bảo trì, dễ nâng cấp, mở rộng
areTo(String str) : so sánh 2 chuỗi, trả về giá trị : nếu < 0 : chuỗi nhỏ hơn str nếu > 0 : chuỗi lớn hơn str nếu = 0 : chuỗi bằng str - int indexOf(int character) : trả về vị trí tìm thấy đầu tiên (cuối cùng) của ký tự character int lastIndexOf(int character) - int indexOf(int character, int from) : trả về vị trí tìm thấy đầu tiên (cuối cùng) của ký tự character, kể từ vị trí from về cuối chuỗi (hay đầu chuỗi) int lastIndexOf(int character, int from) - int indexOf(String string) : trả về vị trí tìm thấy đầu tiên (cuối cùng) của chuỗi string int lastIndexOf(String string) - int indexOf(String string, int from) : trả về vị trí tìm thấy đầu tiên (cuối cùng) của chuỗi string, kể từ vị trí from về cuối chuỗi (hay đầu chuỗi) int lastIndexOf(String string, int from) - String subString(int startIndex, int endIndex) : trả về chuỗi con của một chuỗi bắt đầu từ vị trí startIndex đến vị trí endIndex-1, nếu không có endIndex thì lấy đến cuối chuỗi String org = “This is a test”; String result = “”; result = org.subString(8); - String replace(char orginal, char replacement) : thay thế ký tự replacement cho ký tự orginal String s = “Hello”.replace(‘l’,’w’); // Cho s bằng “Hewwo” - String trim() : cắt bỏ khoảng trống trước và sau chuỗi - String toLowerCase() : đổi chuỗi thành chuỗi thường - String toUpperCase() : đổi chuỗi thành chuỗi hoa String s = “This is a test”; String upper = s.toUpperCase(); - Toán tử + : để kết nối hai đối tượng String, hay một đối tượng String và một giá trị khác thành đối tượng String, String s1 = "two"; System.out.println("one" + s1 + "three"); System.out.println("Word v. " + 9+7); Vì đối tượng String không thể thay đổi do đó bất cứ lúc nào bạn muốn thay đổi chúng, bạn phải copy chuỗi vào StringBuffer, nhưng với toán tử +, bạn có thể viết như sau vì Java tự chuyển sang StringBuffer và thay đổi chuỗi s1 = s1 + “three”; Vì vậy, có thể viết lại chương trình đảo chuỗi trên, không cần thiết phải chuyển sang StringBuffer public class ReverseString { public static String reverse(String source) { int i, len = source.length(); String dest = “”; for (i = (len - 1); i >= 0; i--) dest = dest + source.charAt(i); return dest; } } - static String valueOf(object/var x) : là hàm lớp, trả về một chuỗi để chuyển đổi các biến kiểu sơ cấp hay đối tượng x thành một String Ví dụ : PI là một biến lớp của lớp Math, để in giá trị của sô PI : System.out.println(String.valueOf(Math.PI)); 2. Lớp StringBuffer Tạo một đối tượng StringBuffer Phương thức khởi tạo của lớp StringBuffer có dạng : StringBuffer() : dùng cho chuỗi 16 ký tự StringBuffer(int length) : dùng cho chuỗi length ký tự Ví dụ : StringBuffer dest = new StringBuffer(25); Các phương thức thường dùng của lớp StringBuffer - int length() : cho chiều dài chuỗi - char charAt(int index) : trả về ký tự tại vị trí thứ index - void setCharAt(int index, char ch) : đặt ký tự ch vào StringBuffer, tại vị trí index - StringBuffer append(object/var x) : bổ sung đối tượng hay biến x kiểu bất kỳ vào cuối StringBuffer. Dữ liệu được chuyển thành chuỗi trước khi bổ sung vào StringBuffer int a = 20; StringBuffer sb = new StringBuffer(40); String s = sb.append(“a =”).append(a).toString̣(); - StringBuffer insert(int index, object/var x) : chèn một đối tượng hay biến x kiểu bất kỳ vào vị trí thứ index StringBuffer sb = new StringBuffer("I Java!"); sb.insert(3, "like "); System.out.println(sb); // Cho chuỗi “I like Java” - StringBuffer reverse() : đảo ngược các ký tự của chuỗi StringBuffer sb = new StringBuffer("I Java!"); sb.reverse(); - StringBuffer delete(int startIndex, int endIndex) : xoá chuỗi con từ startIndex đến endIndex-1 - StringBuffer deleteCharAt(int index) : xoá ký tự tại vị trí index - StringBuffer subString(int startIndex, int endIndex) : trả về chuỗi con của một chuỗi bắt đầu từ vị trí startIndex đến vị trí endIndex-1, nếu không có endIndex thì lấy đến cuối chuỗi - StringBuffer replace(int startIndex, int endIndex, String str) : thay thế chuỗi str vào vị trí bắt đầu là startIndex đến endIndex-1 của chuỗi Bạn hãy xem thêm java.lang.String and java.lang.StringBuffer để có được định nghĩa đầy đủ các phương thức và biến cài đặt cho hai lớp này III. LỚP NUMBERS Như đã nói ở trên, trong gói java.lang có sẵn những lớp tương ứng với các kiểu sơ cấp, có thể dùng thay cho kiểu sơ cấp : lớp Integer thay cho kiểu int, lớp Boolean cho kiểu boolean… Lớp Number là lớp cha của mọi lớp bọc kiểu Các lớp bọc kiểu số: Byte, Double, Float, Integer, Long, Short Các lớp bao bọc cho các kiểu dữ liệu khác : Boolean, Character, Void, Math 1. Tạo một đối tượng Float f = new Float(25.5); Float f = new Float(“24.5”); - Các hàm khởi tạo của các lớp bọc kiểu số Float(double n) Float(float n) Float(string str) Double(double n) Double(string str) Tương tự với các lớp bọc kiểu số khác 2. Các phương thức thường dùng cho các lớp kiểu số - Các phương thức trả về giá trị của các đối tượng tương ứng với các dạng số khác nhau byte byteValue() // trả về dạng số byte short shortValue() int intValue() long longValue() double doubleValue() float floatValue() Integer intObj = new Integer(25); int i = intObj.intValue(); // cho i = 25 - Các phương thức lớp chuyển đổi một chuỗi thành giá trị số tương ứng static byte parseFloat(String str) static short parseShort(String str) static int parseInt(String str) static long parseLong(String str) static double parseDouble(String str) static float parseFloat(String str) String s = “42”; int i =Integer.parseInt(s); // cho i = 42 - int compareTo(floatObj/floatVar f ) : so sánh giá trị của đối tượng số với đối tượng hay biến số f, trả về giá trị : nếu = 0 : bằng nhau nếu = số âm : giá trị của đối tượng nhỏ hơn f nếu = số dương : giá trị của đối tượng lớn hơn f - boolean equals(floatObj f ) : nếu = true nghĩa là giá trị của đối tượng bằng f - string toString() : chuyển một đối tượng thành String. Tất cả các lớp kế thừa toString từ lớp Object và nhiều lớp khác trong gói java.lang viết đè phương thức này để cung cấp một cài đặt mà có ý nghĩa với class đó. Chẳng hạn, các lớp bọc kiểu Character, Integer, Boolean… đều viết đè toString Ví dụ : Integer i = new Integer(20); System.out.println(i.toString()); - static String toString(var n) : đây là hàm lớp để chuyển biến số n thành chuỗi String s = Integer.toString(25) // Cho chuỗi s là “25” - static Float valueOf(String str) : đây là hàm lớp trả về đối tượng Float của giá trị str, tương tự với các lớp bọc kiểu số khác String s = “42.5”; Integer i = Integer.valueOf(s); Ví dụ : Viết đoạn chương trình nhập : họ tên không quá 20 ký tự, năm sinh >1970 và <2100, có kiểm tra cho đến khi người dùng nhập đúng import java.io.*; public class Nhap { public static void main (String [] args) throws IOException { DataInputStream kbd = new DataInputStream (System.in); String s = null; String ns = null; // Nhap ho ten while (true) { System.out.print("Nhap Ho va ten : "); s = kbd.readLine(); if ( (s.length() <=20) && (s.length() != 0) ) { System.out.println("Ho va ten la : "+ s); break; } System.out.println("Phai nhap ho ten khong qua 20 ky tu"); } // Nhap nam sinh while (true) { try { System.out.print("Nhap nam sinh : "); s = kbd.readLine(); int i =Integer.parseInt(s); if ((i=2100)) throw new NumberFormatException(); System.out.println("Nam sinh la : "+i); break; } catch (IOException e){} catch(NumberFormatException e){ System.out.println("Ban Phai nhap lai nam sinh trong khoang 1970 den 2100"); } } } } Bạn hãy xem thêm java.lang.Byte, java.lang.Short, java.lang.Integer, java.lang.Double, java.lang.Float để có được định nghĩa đầy đủ các phương thức và biến cài đặt cho các lớp này MỤC LỤC Chương : LẬP TRINH HƯỚNG ĐỐI TƯỢNG TRONG JAVA I. KHÁI NIỆM LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 1. Lập trình hướng đối tượng 2. Trừu tượng hoá II. CƠ CHẾ TRIỂN KHAI MÔ HÌNH HƯỚNG ĐỐI TƯỢNG 1. Tính đóng gói 2. Tính kế thừa 3. Tính đa hình Chương: ĐỐI TƯỢNG VÀ LỚP, MẢNG I. XÂY DỰNG LỚP II. TẠO ĐỐI TƯỢNG 1. Khai báo đối tượng 2. Cách truy xuất thành phần của lớp III. GIỚI THIỆU VỀ PHƯƠNG THỨC 1. Khai báo phương thức 2. Phạm vi truy xuất thành phần của lớp 3. Phương thức Main() 4. Hàm khởi tạo 5. Hàm hủy 6. Từ khoá this 7. Nạp chồng hàm 8. Truyền tham đối IV. LỚP KẾ THỪA 1. Khai báo kế thừa 2. Viết chồng hàm 3. Từ khoá super V. LỚP VÀ PHƯƠNG THỨC TRỪU TƯỢNG VI. LỚP HẰNG (KHÔNG KẾ THỪA) VÀ HÀM HẰNG (KHÔNG VIẾT CHỒNG) 1. Cấm sự viết chồng 2. Cấm sự kế thừa VII. LỚP LỒNG NHAU VIII. CHUYỂN ĐỔI KIỂU 1. Kiểu sơ cấp thành kiểu phức hợp 2. Giữa các kiểu phức hợp IX. MẢNG 1. Tạo và sử dụng mảng 2. Mảng đa chiều 3. Sao chép mảng Chương : GÓI VÀ GIAO DIỆN I. GÓI 1. Định nghĩa gói 2. Điều khiển truy xuất 3. Sử dụng gói II. GIAO DIỆN 1. Định nghĩa giao diện 2. Hiện thực giao diện 3. Truy xuất hiện thực thông qua tham chiếu giao diện 4. Biến trong giao diện 5. Kế thừa giao diện Chương : LỚP STRING VÀ NUMBER I. TỔNG QUÁT II. LỚP STRING III. LỚP NUMBER
File đính kèm:
- Lập trình hướng đối tượng trong Java.doc