1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình ngôn ngữ JAVA

63 303 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 63
Dung lượng 0,99 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

String là một lớp đã được triển khai sẵn trong gói java.lang Khai báo và gán trị String ; Từ khoá String cho phép khai báo biến có kiểu là đối tượng String.. Các khái niệm cơ sở của LT

Trang 2

Chương 1 7

Các khái niệm cơ sở 7

1 Một chương trình Java đơn giản 7

1.1 Văn bản mã nguồn JAVA của chương trình 7

1.2 Dịch và chạy chương trình 7

1.3 Ví dụ 8

2 Các kiểu dữ liệu nguyên thuỷ và giá trị 8

2.1 Các kiểu số nguyên 8

2.2 Các kiểu số thực 9

2.3 Kiểu kí tự 9

2.4 Kiểu lôgic 10

2.5 String 10

2.6 Các phép toán 11

3 Các lệnh điều khiển 12

3.1 Các câu lệnh rẽ nhánh 12

3.2 Xây dựng vòng lặp 13

4 Mảng 15

4.1 Khai báo và khởi tạo 15

4.2 Sử dụng mảng 16

4.3 Mảng nhiều chiều 16

4.4 Sắp xếp một mảng 16

5 Chuyển đổi kiểu 17

5.1 Ép kiểu – Casting 17

5.2 Chuyển đổi một biến kiểu nguyên thuỷ thành đối tượng và ngược lại 18

Chương 2 19

Trang 3

Phương pháp hướng đối tượng và java 19

1 Các phương pháp xây dựng chương trình 19

1.1 Lập trình hướng thủ tục 19

1.2 Lập trình hướng đối tượng 20

2 Các khái niệm cơ sở của LTHĐT 21

2.1 Lớp – Class 21

2.2 Đối tượng – Object 22

2.3 Trừu tượng hoá dữ liệu và bao gói thông tin 22

2.4 Truyền thông báo - message exchange 23

2.5 Kế thừa – Heritage 24

2.6 Tương ứng bội – polymorphism 25

2.7 Liên kết động - Dynamic binding 25

2.8 Các ưu điểm 25

3 Xây dựng lớp trong java 26

3.1 Các thành phần của lớp 26

3.2 Các biến thành phần 27

3.3 Biến lớp và mô tả static 28

3.4 Phương thức – method 28

3.5 Constructor 30

3.6 Lớp là thành phần của một lớp khác 30

3.7 Tổ chức lớp và tệp chương trình 31

4 Kế thừa và sử dụng lại 32

4.1 Kế thừa trong Java 32

4.2 Xây dựng lớp con 32

4.3 Quan hệ trong kế thừa 33

Trang 4

4.4 Sử dụng lại 33

5 Interface 34

5.1 Khái niệm Interface 34

5.2 Cách xây dựng 34

5.3 Cài Interface vào lớp 34

Chương 3 35

Lập trình ứng dụng Java 35

1 Các loại chương trình JAVA 35

1.1 Lập trình Applet - Applet Programming 35

1.2 Xây dựng ứng dụng độc lập - Application Programming 35

1.3 Xây dựng các JavaBeans 36

1.4 Lập trình phía Server - Servlet Programming 36

2 Xây dựng ứng dụng 36

2.1 Sự khác nhau giữa ứng dụng Dos và ứng dụng Window 36

2.2 Nhập từ bàn phím và xuất ra màn hình 37

2.3 Nhập và xuất qua tệp 38

3 Xử lí ngoại lệ - Exception 39

3.1 Ngoại lệ và lỗi 39

3.2 Câu lệnh Try – Catch 39

4 Tìm hiểu thêm một số lớp 40

4.1 Lớp Math 40

4.2 Lớp String 40

4.3 Lớp Random 43

5 Sử dụng gói Utility 43

5.1 Gói java.util 43

Trang 5

5.2 Lớp Vector 43

5.3 Lớp Stack 44

5.4 Ngày tháng và Lịch 45

6 Bao gói các kiểu nguyên thuỷ - Wrapped 47

6.1 Các lớp bao gói 47

6.2 Ví dụ minh hoạ 47

Chương 4 49

Truy cập CSDL 49

1 Mở đầu về CSDL 49

1.1 CSDL là gì ? 49

1.2 CSDL quan hệ 49

2 SQL 51

2.1 SQL dùng làm Data Definition Language 51

2.2 SQL dùng làm Data Maintenance Language 52

2.3 SQL dùng làm Data Query Language 54

3 Truy nhập CSDL 54

3.1 ODBC và JDBC Drivers 54

3.2 Tại sao cần JDBC 55

3.3 Các kiểu JDBC driver 55

4 Thiết lập Driver 56

4.1 Tìm hiểu Driver 56

4.2 Lớp DriverManager 56

4.3 Driver Interface 57

4.4 Chương trình DriverApp 57

4.5 Thiết lập kết nối đến CSDL 59

Trang 6

5 Sử dụng JDBC 60

5.1 Thiết lập ODBC Drivers để làm việc với CSDL Microsoft Access 60

5.2 Chương trình AccessApp 60

5.2 Sử dung chương trình AccessApp 62

5.4 Hoạt động của AccessApp 63

Trang 7

Chương 1

Các khái niệm cơ sở

1 Một chương trình Java đơn giản

1.1 Văn bản mã nguồn JAVA của chương trình

Là tệp văn bản Text, có thể soạn thảo bằng bất cứ bộ soạn thảo văn bản nào

Quy ước đuôi là java

Phân biệt chữ IN HOA, chữ thường - Case sensitive

- Phần tư liệu Javadoc

/** các dòng

tư liệu javadoc */

Quy ước đặt tên

Tên là một dãy kí tự hoặc kí số, phải bắt đầu bằng chữ (letter) hoặc dấu nối dưới (_), hoặc dấu dollar ($) Tên không được trùng với từ khoá

Trình biên dịch Javac tự động tạo ra các tên có kí tự dollar ($), do đó nên tránh dùng kí tự này

1.2 Dịch và chạy chương trình

Gọi chương trình dịch : javac <tên tệp java> <tên tệp đích class>

Dịch từ tệp văn bản TEXT sang tệp mã Byte-code

Quy ước các tệp mã byte-code (tệp đã dịch) có đuôi class

Mã byte-code không phải là mã máy Nó là khái quát hoá, nhằm làm cho chương trình Java chạy được trên nhiều nền máy khác nhau (portability)

Khi chạy chương trình, JVM - Java Virtual Machine sẽ thông dịch

Cho chạy: java <tên tệp mã byte-code>

Không cần gõ đuôi class

Trang 8

Tên class chính = tên tệp (.java) = tên tệp byte-code( class)

Soan thảo tệp văn bản có nội dung trên

Ghi lại thành tệp Hello.java Lưu ý phải đúng y như tên lớp Hello, với chữ H in hoa

Biên dịch : javac Hello.java

Sẽ tạo thành tệp byte-code Hello.class

Cho chạy : java Hello

2 Các kiểu dữ liệu nguyên thuỷ và giá trị

Java có 8 kiểu dữ liệu nguyên thuỷ Đó là :

byte, short, int, long, float, double, char, boolean

2.1 Các kiểu số nguyên

Kiểu byte, short, int, long là các số nguyên 8-, 16-, 32-, 64-bit

thước byte

Trang 9

Cơ số 8 - octal – phải bắt đầu bằng 0

2.2 Các kiểu số thực

Kiểu Kích

thước byte

324

6-7 14-15

Kiểu float là số thực 32, phải kết thúc bằng f hoặc F

Kiểu double là số thực 64-bit, phải kết thúc bằng d hoặc D

Nếu không có hậu tố f, F thì cũng hiểu mặc định là double

Một giá trị số thực có thể viết dưới một trong 4 dạng sau :

suffix là f, F, d, D như đã nêu trên, có thể vắng mặt

Phần mũ là chữ cái e hoặc E , dấu + hoặc - và một số nguyên Có thể có hoặc không Bắt buộc phải có nếu dùng dạng thứ 3

Ví Dụ 1000000.0 = 1.0E6

Giá trị đặc biệt NaN = "not a number," xảy ra khi kết quả của phép toán không xác định, ví dụ chia cho 0

2.3 Kiểu kí tự

Kiểu char là kí tự 16-bit Unicode Unicode 16-bit là tập hợp bao trùm, chứa bộ

mã kí tự ASCII, có thêm nhiều kí tự của các thứ tiếng khác nhau

Một giá trị kí tự được viết trong dấu nháy đơn (') ví dụ 'A'

Để thể hiện các kí tự đặc biệt như nháy đơn ('), nháy kép ("), gạch xiên (\) phải đặt đứng trước một mã thoát là kí tự gạch xiên:

Bảng mã thoát của các kí tự đặc biệt

Mã thoát Kí tự đặc biệt

Trang 10

String không phải là một kiểu nguyên thuỷ trong Java

String là một lớp đã được triển khai sẵn trong gói java.lang

Khai báo và gán trị

String <tên biến>;

Từ khoá String cho phép khai báo biến có kiểu là đối tượng String

Một giá trị string là một xâu kí tự nằm trong cặp dấu nháy kép (")

Trang 11

Nối xâu : +

System.out.println(" Ho va ten :"+ HoTen);

sẽ in ra dòng chữ : Ho va ten : Nguyen Van A

Độ dài xâu :

Lớp String có phương thức length( ) cho biết độ dài là số kí tự của đối tượng xâu

Ví dụ

String HoTen = "Nguyen Van A";

Int dodaiten = HoTen.length() ; //= 12

Lớp String có nhiều phương thức xử lí khác nữa ta sẽ tìm hiểu sau

chuyển đổi kiểu - caste,

chọn theo điều kiện if - selection,

Toán tử gán - assignment operators

Bảng các toán tử của Java

Operator Type Operator Description Example

>= Greater than or equal a >= b

<= Less than or equal a <= b

Trang 12

& AND a & b

Decrement and assign a

-= Subtract and assign a -= b

%= Take modulus and assign a %= b

&= AND and assign a &= b

<<= Left-shift and assign a <<= b

>>= Right-shift and assign a >>= b

>>>= Zero-filled left-shift and assign a >>>= b

Instance instanceof Is instance of class? a instanceof b

Allocation new Create a new object of a class new A()

Selection ? : If Then selection a ? b : c

3 Các lệnh điều khiển

3.1 Các câu lệnh rẽ nhánh

Các lệnh rẽ nhánh IF, IF ELSE , SWITCH CASE

Y nghĩa như đã quen biết

Dưới đây là một ví dụ minh hoạ Chương trình in ra lời chào buổi sáng hay buổi tối, hiển thị thời gian ngày tháng tuỳ theo thời điểm lúc chạy

Java có sẵn đối tượng Calendar trong gói java.util để xử lí thời gian và ngaỳ

tháng

Trang 13

Chương trình sau sẽ minh hoạ cach dùng Calendar cũng như các lệnh rẽ nhánh trên

import java.util.*;

class NgayThangApp {

public static void main(String[] arguments) {

//get current time, date Calendar now = Calendar.getInstance();

int hour = now.get(Calendar.HOUR_OF_DAY);

int minute = now.get(Calendar.MINUTE);

int day = now.get(Calendar.DAY_OF_MONTH);

int month = now.get(Calendar.MONTH) + 1;

int year = now.get(Calendar.YEAR);

case 1 : System.out.print("January"); break;

case 2 : System.out.print("February"); break;

case 3 : System.out.print("March"); break;

case 4 : System.out.print("Avril"); break;

case 5 : System.out.print("May"); break;

case 6 : System.out.print("June"); break;

case 7 : System.out.print("July"); break;

case 8 : System.out.print("August"); break;

case 9 : System.out.print("September"); break;

case 10 : System.out.print("October"); break;

case 11 : System.out.print("November"); break;

case 12 : System.out.print("December"); break; }

System.out.println(" "+ day + " , " + year );

}

}

3.2 Xây dựng vòng lặp

Vòng lặp FOR

Trang 14

For (int number = 0; number <1000; number ++) {

If (number % 10 == 0) System.out.println("#: "+ number);

Trang 15

public static void main( String argument[]) {

int count;

int total = 0;

externalloop :

while ( total < 1000 ) {

for (count = 0; count < 10; count ++) {

total = total + count;

if (total > 100) break externalloop;

System.out.println(" total = " + total);

} }

}

}

Nếu không đặt nhãn cho vòng lặp và dùng break externalloop; mà chỉ

có lệnh break; thì sẽ kết thúc vòng lặp bên trong là vòng FOR

Tương tự, nhãn cũng có thể dùng với lệnh Continue

4 Mảng

4.1 Khai báo và khởi tạo

<kiểu phần tử> [] <tên biến mảng> ;

Khai báo kèm khởi trị = danh sách các giá trị nằm trong cặp ngoặc nhọn { }

Số phần tử mảng = kích thước mảng sẽ được cố định bằng số giá trị có trong danh sách khởi tạo

Ví dụ :

String Ten[] = {"Hung ", "Dung","Cuong", "Thang"};

Sau lệnh trên mảng Ten sẽ gồm 4 phần tử, mỗi phân tử là một đối tượng String Không thể thay đổi kích thước mảng về sau

Trang 16

Khi mảng lớn thì thường phải cấp phát vùng nhớ đủ cho kích thước mảng trước

khi gán trị Dùng lệnh new chỉ rõ kiểu phần tử mảng và kích thước mảng theo mãu

sau

= new <kiểu phần tử> [ kích thước mảng ] ;

Ví dụ :

Int maso = new int[100]; //xin cap mot mang 100 so nguyen

Mọi phần tử mảng sẽ được khởi trị mặc định như sau :

- nếu kiểu số thì bằng giá trị 0;

- nếu kiểu kí tự char thì bằng giá trị kí tự không ' \0'

- nếu kiểu boolean thì bằng giá tri false

- String và các đối tượng khác thì bằng null

Trang 17

public static void main( String argument[]) {

String names [] = {"Hung","Dung","Anh","Cuong","Tien"};

System.out.println(" thu tu ban dau :");

for (int i=0; i<names.length; i++)

System.out.println( i + ": " + names[i]);

Arrays.sort(names);

System.out.println(" thu tu sau khi sap xep la : ");

for (int i=0; i<names.length; i++)

System.out.println( i + ": " + names[i]);

}

}

5 Chuyển đổi kiểu

Bao gồm cả các kiểu nguyên thuỷ và các lớp

Chuyển đổi kiểu có hai loại, chuyển đổi tự nhiên và ép kiểu = chuyển đổi kiểu của một biến một cách cưõng bức, phải nêu tường minh

Còn có thể :

- Chuyển đổi một đối tượng thành một đối tượng khác (phải có quan hệ kế thừa)

- Dùng đối tượng để tạo ra biến kiểu nguyên thuỷ tương ứng

- Từ biến kiểu nguyên thuỷ tạo ra đối tượng

5.1 Ép kiểu – Casting

Nếu xếp các kiểu số theo thứ bậc thì ta có

Byte < short < int < long < float < double

- Chuyển đổi kiểu tự nhiên : trong các biểu thức số học hỗn hợp nhiều biến có kiểu khác nhau thì kết quả sẽ có kiểu cao nhất Khi tính giá tri biểu thức, các biến kiểu thấp hơn sẽ được tự động chuyển thành kiểu cao hơn Việc này không làm mất thông tin

Ngoài ra, có thể chuyển Char -> int

- Ép kiểu

Là chuyển đổi không tự nhiên, từ kiểu cao hơn thành kiểu thấp hơn Thông tin sẽ

bị mất mát đi một phần Phải ấn định kiểu mới một cách hiển : viết tên kiểu mới trong dấu ngoặc đơn và đặt trước tên biến

Ví dụ :

Float source = 7.06F ;

Int destination = (int) source ;

Với các đối tượng có quan hệ kế thừa cũng có vấn đề tương tự

Trang 18

5.2 Chuyển đổi một biến kiểu nguyên thuỷ thành đối tượng và ngược lại

Một biến kiểu nguyên thuỷ và một đối tượng là hai thứ rất khác nhau Không thể Casting đơn giản như nói trên

Gói java.lang cung cấp các lớp bao gói - Wrapper class : Boolean, Byte, Char, Double, Float, Integer, Long, Short để tạo các đối tượng ứng với các kiểu nguyên thuỷ trên Lưu ý chữ cái đầu tiên là chữ in HOA

Các lớp bao gói cho phép chuyển đổi kiểu nguyên thuỷ thành đối tượng và ngược lại Ví dụ

- Tạo các đối tượng wrapper

Integer intObj = new Integer (1234);

- Chuyển đối tượng wrapper thành biến kiểu nguyên thuỷ

Int ival = intObj.intValue() ;

lúc này biến nguyên ival sẽ có giá trị là 1234

Một trường hợp điển hình là chuyển đổi một xâu kí số thành giá trị số

String count = "25";

Int valcnt = Integer.parseInt(count);

Trang 19

Chương 2

Phương pháp hướng đối tượng và java

1 Các phương pháp xây dựng chương trình

Cách tiếp cận là chia để trị ,Top-down

Chương trình được phân rã thành nhiều chương trình con

Hình : Sơ đồ cấu trúc - structure chart - của chương trình

Chương trình là danh sách các câu lệnh, chia thành nhóm - các hàm, thủ tục

Dữ liệu : Toàn cục - global : dùng chung

Cục bộ (theo từng mức) - local : của riêng từng hàm, thủ tục

CTC 3

Chương trình chính

CTC 11 CTC 12 CTC 22 CTC 31 CTC 32

Trang 20

Hình : Sơ đồ dữ liệu - thủ tục xử lí

Nhược điểm :

- Khó kiểm soát qúa trình xử lí các dữ liệu toàn cục vì nhiều hàm có thể truy cập

và thay đổi Khi thay đổi cấu trúc dữ liệu thì cũng phải thay đổi các hàm xử lí

- Chưa sát với hệ thống thực : chỉ tập trung vào hoạt động, vào chức năng

Các đặc điểm chính

- Hướng công việc (thuật toán)

- Topdown - Chia để trị

- Dữ liệu chuyển tuần tự qua các hàm để xử lí

- Nhiều hàm tham gia xử lí dữ liệu chung

1.2 Lập trình hướng đối tượng

Khái quát hoá các thực thể vật lí hoặc trừu tượng

Gắn bó chặt chẽ dữ liệu + hàm chức năng -> "đối tượng"

Bảo vệ dữ liệu nội tại, che giấu đối với bên ngoài

Giao tiếp, trao đổi với nhau qua cơ chế truyền thông báo

Sơ đồ các đối tượng và truyền thông báo

Dữ liệu

Dữ liệu Hàm

Dữ liệu Hàm

Dữ liệu chung - Global Data

CTC 1 _d

ữ liệu cục bộ

CTC 2 _

CTC 3 _

Trang 21

Các đăc điểm

- Hướng dữ liệu thay cho hướng vào công việc xử lí dữ liệu (chức năng)

- Cấu trúc dữ liệu + hàm chưc năng xử lí dữ liệu thành một thể thống nhất

- Bảo vệ dữ liệu, che giấu đối với bên ngoài

- Trao đổi nhau qua truyền thông báo

- Tiếp cận từ dưới lên - bottom up

2 Các khái niệm cơ sở của LTHĐT

Lớp - Class

Đối tượng - Object

Trừu tượng hoá dữ liệu và bao gói thông tin - Data Abstraction and Encapsulation

Kế thừa : - Heritage

Tương ứng bội - polymorphism

Liên kết động - Dynamic binding

Truyền thông báo - message exchange

- Hàm chức năng : có nhiều tên gọi khác nhau

Hàm thành phần - member function, Phương thức - method

- Constructor - cấu tử - hàm khởi tạo một đối tượng thuộc lớp, tạo ra một

thể hiện cụ thể (instance) của lớp

Tên của Constructor phải trùng tên lớp

Public <tên lớp> ( ) {

// thân hàm - các lệnh thực hiện }

Ví dụ Lớp Man là khuôn mẫu để tạo ra các đối tượng “người” Phân dữ liệu gồm

có họ tên, năm sinh Phần hàm chức năng gồm có tính tuổi, hiển thị

Trang 22

public Man( String name, int birthyear){

ten = name;

namsinh = birthyear;

}

//Cac ham thanh phan

public int tuoi(){

Calendar now = Calendar.getInstance();

return (now.get(Calendar.YEAR) - namsinh);

} public void hienthi(){

System.out.println("Ho va ten :"+ten);

System.out.println("Tuoi :"+ tuoi());

} }

2.2 Đối tượng – Object

Đối tượng - Object : một thể hiện (instance) của Class

Man ng1 = new Man("Nguyen Van A",1970);

Man ng2 = new Man("Pham Ngoc H",1980);

2.3 Trừu tượng hoá dữ liệu và bao gói thông tin

Trừu tượng hoá dữ liệu - Data Abstraction

- dữ liệu = các thông tin về đối tượng cần xem xét nghiên cứu, được tổ chức thành một tổng thể thống nhất, phản ánh những nét đặc trưng nhất của đối tượng

- Không những thế, các hàm thành phần gắn với đối tượng mỗi khi goị đến sẽ xử lí

dữ liệu một cách tự động : từ các số liệu cơ sở biến thành thông tin cần thiết cho NSD

Ví dụ : hàm tính tuổi, từ năm sinh suy ra tuổi

public int tuoi(){

Calendar now = Calendar.getInstance();

return (now.get(Calendar.YEAR) - namsinh);

} Bao gói thông tin - Encapsulation

Public : mọi người đều có thể dùng :

Protected : các hàm thành phần của đối tượng và của các lớp con, cháu dẫn xuát từ lớp này

Private : chỉ các hàm thành phần mới được phép thâm nhập, không cho phép ngay

cả các hàm của các lớp con cháu thâm nhập

Các dữ liệu : thường là Protected

Các hàm thành phần = giao diện với bên ngoài : thường là Public

Trang 23

2.4 Truyền thông báo - message exchange

Truyền thông báo : là cơ chế giao tiếp, phối hợp giữa các đôi tượng để thực hiện các chức năng của chương trình

Các dữ liệu đã được baỏ vệ, bao gói kín, do đó để thực hiện các phép xử lí dữ liệu phải thông qua đối tượng, gửi đến đối tượng một yêu cầu làm việc gì đó Đối tượng sẽ tự

xử lí dữ liệu thuộc về nó theo như yêu cầu

Ví dụ đối tượng chính của chương trình ManApp :

- tạo ra đối tượng ng1

- yêu cầu ng1 hiển thị các thông tin về mình

class ManApp{

public static void main (String[] arguments) {

Man ng1 = new Man("Pham Ngoc H",1980);

ng1.hienthi();

} }

Kết hợp với khai báo lớp Man đã thực hiện ta có chương trình java đơn giản sau

import java.lang.System;

import java.util.*;

class ManApp{

public static void main (String[] arguments) {

Man ng1 = new Man("Pham Ngoc H",1980);

ng1.hienthi();

} }

//Cac ham thanh phan

public int tuoi(){

Calendar now = Calendar.getInstance();

return (now.get(Calendar.YEAR) - namsinh);

} public void hienthi(){

System.out.println("Ho va ten :"+ten);

System.out.println("Tuoi :"+ tuoi());

Trang 24

}

}

Phần sau ta phát triển lớp Man thành lớp Employee có nhiều dữ liệu hơn và cũng nhiều hàm chức năng hơn Chương trình EmployeeApp sẽ có câu lệnh thực hiện việc tăng lương cho một nhân viên Việc này được thực hiện bằng cách gưỉ một thông báo đến đối tượng nhân viên là e1, nội dung thông báo là định lại mức lương và dữ liệu kèm theo là mức lương mới 650.00

- Ngoài ra, lớp con cháu có thể bổ xung thêm dữ liệu, hàm thành phần

- có thể thay đổi, cải tiến hành vi chức năng cũ nếu thấy cần thiết

Vi dụ : Lớp Employee dẫn xuất từ lớp Man

Các dữ liệu được bổ xung thêm là : phòng ban, lương

Hai phương thức được bổ xung thêm là setsalary(), getsalary()

Hàm chức năng hiển thi() được cải tiến để hiển thị đầy đủ thông tin về đơn vị làm

public static void main (String[] arguments) {

Employee e1 = new Employee("Pham Ngoc H",1980,"Tai vu",500.00f);

class Employee extends Man {

Trang 25

}

//Cac ham thanh phan

public void setsalary ( float sal) {

salary = sal;

} public float getsalary () {

return salary;

} public void hienthi(){

System.out.println("Ho va ten :"+ten);

2.6 Tương ứng bội – polymorphism

Là cơ chế cho phép cùng một tên hàm, một toán tử có thể mang các nội dung khác nhau tuỳ theo tham đối, các đối tượng tham gia phép toán

Ví dụ :

- Dấu cộng có thể là cộng hai số, nối hai String

- Phương thức hiển thị() như trong ví dụ trên sẽ thực hiện công viẹc

khác nhau tuỳ theo đối tượng thực hiện Đối tượng thuộc lớp Man thì chỉ hiển thị tên, tuổi; đối tượng thuộc lớp Employee thì còn hiển thị thêm đơn vị công tác và lương

- Trường hợp điển hình là một lớp thường có nhiều Constructor khác nhau về số tham đối, thực hiện khởi trị cho các dữ liệu thành phần của đối tượng tuỳ theo lượng tin được cung cấp

2.7 Liên kết động - Dynamic binding

Cơ chế liên kết động gắn liền với tương ứng bội Cùng một tên hàm, phương thức, có thể tương ứng với nhiều nội dung khác nhau Cần có cơ chế cho phép nối lời gọi hàm, phương thức đến nội dung tương ứng một cách phù hợp với đối tượng thực hiện, vói danh sách tham số thực sự nhận được trong thời gian thực hiện chương trình Chỉ đến lúc chương trình đang chạy việc liên kết này mới được thực hiện

Trang 26

- Bảo vệ, che giấu thông tin nên tránh lỗi, xây dựng chương trình an toàn hơn

- Cách tiếp cận hướng đối tượng đặt trọng tâm vào dữ liệu, do đó dễ triển khai, cài đặt hơn

- Các mối quan hệ, các giao diện với bên ngoài phản ánh rõ ràng qua cơ chế truyền thông báo

3 Xây dựng lớp trong java

Khai báo một lớp như sau

Môtả class tên_lớp extends tên_lớp_mẹ thân_lớp

Các mô tả : abstract, public, final

Lớp abstract nghĩa là không thể tạo ra đối tượng cụ thể của lớp Nó là khung cơ sở

nhất để dẫn xuất ra các lớp con cháu

Lớp public nghĩa là cho phép sử dụng ngoài gói chứa nó Nếu không khai báo là

public, nó chỉ có thể được tham chiếu trong gói

Lớp final nghĩa là không thể sản sinh dẫn xuất ra các lớp con

Dĩ nhiên một lớp không thể đồnh thời vừa final và abstract

Sau extends là tên của lớp mẹ trực tiếp Phần này có thể không có

Phần thân gồm khai báo các thành phần của lớp, được viết trong cặp dấu ngoặc nhọn { }

Một khung đơn giản nhất khai báo lớp là

Class tên_lớp {

// các khai báo biến

//các khai báo methods

}

Các vấn đề cần xem xét khi tạo và sử dụng đối tượng

- Tạo ra các biến của một đối tượng

- Tạo ra các biến của lớp

- Sử dung các phương thức với đối tượng và lớp

- Gọi một phương thức trong một câu lệnh

Trang 27

- xây dựng constructor

- Cách truyền tham số cho một phương thức

- Con trỏ this

- tạo đối tượng mới

- đặt đối tượng bên trong một đối tượng khác

3.2 Các biến thành phần

Biến có thể là một kiểu nguyên thuỷ hoặc một đối tượng Có thể khai báo các

biến kiểu nguyên thuỷ, mảng, string hay các đối tượng khác

Cần khai báo các biến đầu tiên, ngay sau khai báo class

Khai báo biến

Môtả kiểu tên_biến phần_khởi_trị;

Phần mô tả và phần khởi trị có thẻ vắng mặt

Kiểu có thể là kiểu dữ liệu nguyên thuỷ, kiểu lớp, kiểu interface

Phần tên biến có thể kèm một hoặc vài cặp ngoặc vuông ([]) nếu là biến mảng

Phần khởi trị gồm dấu bằng (=) sau đó là biểu thức (cùng kiểu) Nếu là biến mảng thì phần khởi trị cho mảng sẽ là danh sách các gía trị, biểu thức trong cặp dấu ngoặc nhọn

Phần mô tả có thể là một trong 7 lựa chọn : public, protected, private, static,

final, transient, volatile

Các mô tả : public, protected, private xác định quyền thâm nhập

Private : của riêng đối tượng, chỉ bên trong đối tượng

Protected : cho phép con cháu truy cập đựoc theo kế thừa

Public : mọi người đều có thể truy cập

static : nghĩa là gắn với lớp và có thể chia sẻ chung cho các đối tượng của lớp này

final : là một hằng, không thể thay đổi, và phải khởi trị trước khi dùng

Trang 28

//Cac ham thanh phan

3.3 Biến lớp và mô tả static

Biến lớp - class variables

Khi một đối tượng được khởi tạo, các biến sẽ nhận các gía trị cụ thể riêng cho đôi tượng đó

Ví dụ : Sau các lệnh khởi tạo

Man ng1 = new Man("Nguyen Van A",1970);

Man ng2 = new Man("Pham Ngoc H",1980);

Thì đối tượng ng1 có tên là Nguyễn Văn A, năm sinh là 1970

đối tượng ng2 có tên là Phạm ngọc H, năm sinh là 1980

Các biến trường là thuộc tính của riêng từng đối tượng

Khi thay đổi lại ví dụ e1.setsalary(650.00f) thì không ảnh hưởng gì đến các đối tượng khác cùng lớp

Tuy nhiên, ta muốn có những biến chung cho cả lớp = class variables Vi dụ, hệ số

lương chung cho mọi Employee đều là 120.000 Việc thay đổi hệ số lương do Bộ tài chính quyết định sẽ áp dụng cho mọi đối tượng Employee

Khai báo : thêm mô tả static vào phía trước phần khai báo thông thường

Thâm nhập : thâm nhập các biến lớp cũng tương tự như các biến đối tượng : tên

lớp, dấu chấm, tên biến

Không thể dùng tên lớp để thâm nhập đến biến đối tượng

Tương tự ta cũng có khái niệm phương thức chung của lớp

Mô tả static

Mô tả static dùng với biến và cho các phương thức như sẽ thấy ở phần dưới đây Tóm lại, mô tả static nghĩa là :

- Chung cho cả lớp, cho mọi đối tượng của lớp

- không gắn với một đối tượng cụ thể

- truy cập bằng tên lớp, dấu chấm, tên biến hoặc phương thức

3.4 Phương thức – method

Là các hàm, thủ tục thực hiện các phép toán xử lí các biến thành phần - các dữ

liệu Nếu là thủ tục thì không có kết quả trả về - kiểu trả về là void

Trang 29

Giống như các biến, có các phương thức của đối tượng và của lớp (static)

Khai báo phương thức

Môtả kiểu_kết_quả tên_phương_thức(danh_sách_tham_số) phần_thân

Phần mô tả có thể là : public, protected, private hoặc final, static, abstract, native,

synchronized

final nghĩa là không thể phát triển tiếp bằng cách viết chồng - overridden

static nghĩa là chỉ thuộc lớp đang xét Nó chỉ được phép xử lí các biến static

Method static cũng là final

abstract không có phần thân Nó để dành cho viết đè lên về sau

native nghĩa là viết bằng một ngôn ngữ khác Java Nó cũng không có thân

synchronized nghĩa là phải đợi một lock trên một đối tượng hay lớp khác mới có

thể được thực hiện

Nếu phương thức không có kết quả trả về thì phần kiểu kết quả trả về là void

Danh sách tham số có thể gồm nhiều tham số cách nhau dấu phảy Mỗi tham số trong danh sách gồm có kiểu, tên (kèm các cặp dấu ngoặc vuông ([]) nếu là kiểu mảng)

Phần thân là các câu lệnh xử lí nằm trong cặp dấu ngoặc nhọn

Trong phần thân có thể có các khai báo biến cục bộ của riêng phương thức đó

Tầm nhìn thấy, tầm tác dụng - scope - của biến là phạm vi bên trong cặp dấu

ngoặc nhọn mà biến được khai báo

Câu lệnh để trả kết quả cho chương trình gọi phương thức là

- Phải dùng tên lớp nếu là phương thức static

- Phải có cặp dấu ngoặc đơn ( ), mặc dù phương thức không có tham số

- Phân biệt sử dụng hàm, có kết qủa trả về, và thủ tục trả về void : thủ tục có thể dùng độc lập như một câu lệnh, hàm phải dùng như một thành phần trong câu lệnh, biểu thức hoạc câu lệnh gán

Trang 30

3.5 Constructor

Là phương thức đặc biệt, dùng để khởi tạo ra đối tượng thuộc lớp

Khai báo Constructor

Môtả tên(danh_sách_tham_số) phần_thân

Mô tả có thể là : public, protected, private Nó chỉ ra phạm vi truy cập, ý nghĩa như đã biết

Không có phần kiểu trả về

Tên của constructor phải trùng với tên lớp

Phần thân của constructor là các lệnh khỏi tạo đối tượng nằm trong cặp dấu ngặc nhọn Có thể rỗng, chỉ gồm cặp dấu ngoặc nhọn

Thân của constructor thường bắt đầu bằng các lời gọi - constructor call - để gọi

một constructor khác của chính lớp đang xét hoặc constructor của lớp mẹ :

this(danh_sách_tham_s ố); //gọi Constructor khác của lớp này

super(danh_sách_tham_s ố); //gọi Constructor của lớp mẹ

Nếu không có lệnh gọi constructor nào thì mặc định coi như là gọi super()

Tạo một đối tượng

Các biến kiểu nguyên thuỷ tồn tại và có thẻ sử dụng ngay sau khi khai báo

Khác với các biến kiểu nguyên thuỷ, một đối tượng mới cần phải được khởi tạo

một cách tường minh bằng new

Các câu lệnh Man ng1;

Man ng2;

Chưa tạo ra đối tượng Nếu sử dụng ngay, ví dụ gọi thực hiện phương thức ng1.hienthi()

thì sẽ mắc lỗi NULL exception

Phải có lệnh khởi tạo tường minh

Man ng1 = new Man("Nguyen Van A",1970);

Man ng2 = new Man("Pham Ngoc H",1980);

Lệnh new sẽ cấp phát một vùng nhớ đủ để chứa đối tượng và sau đó gọi constructor

của lớp để khởi trị các biến của đối tượng - một thể hiện cụ thể, một instance của lớp Đó

là lí do vì sao constructor phải cùng tên với tên lớp

3.6 Lớp là thành phần của một lớp khác

Một chương trình java thường gồm nhiều lớp một lớp chính và nhiều lớp phụ

Trang 31

Các lớp phụ này có thể được khai báo bên ngoài lớp chính, độc lập

Cũng có trường hợp, lớp phụ là một thành phần trong lớp chính - inner class Khi biên dịch, tên của các lớp thành phần sẽ được tạo theo quy tắc

<tên lớp mẹ>$<tên lớp thành phần> class

3.7 Tổ chức lớp và tệp chương trình

Các gói - Packages

Chương trình Java được tổ chức thành các gói - packages Đó là các tệp mã nguồn

xây dựng các lớp và các interfaces (sẽ nói sau) Tệp mã nguồn trong một gói phải bắt đầu

bằng câu lệnh package

package <tên package> ;

Nếu không có lệnh package mở đầu thì mọi lớp và interfaces khai báo trong tệp

được coi là thuộc gói không tên - no name package

Có thể dùng các lớp và interface trong một gói khác với điều kiện nó là public và

phải chỉ rõ tên gói Biến môi trường CLASSPATH để chỉ đường dẫn đến nơi đặt các gói lớp

Trong một tệp mã nguồn, chỉ có một lớp đựoc khai báo là public

Tên của tệp mã nguồn phải trùng với tên của lớp hay interface được khai báo là

Nếu một chương trình không lớn, chỉ gồm một vài lớp thì các lớp đều nằm trong

một gói, mã nguồn sẽ nằm trong một tệp, tên tệp phải trùng tên lớp public Các lớp còn lại không được là public

Ngày đăng: 12/01/2015, 09:48

HÌNH ẢNH LIÊN QUAN

Bảng mã thoát của các kí tự đặc biệt - Giáo trình ngôn ngữ JAVA
Bảng m ã thoát của các kí tự đặc biệt (Trang 9)
Bảng mã thoát vói các kí tự đặc biệt tham khảo phần kiểu kí tự ở trên. - Giáo trình ngôn ngữ JAVA
Bảng m ã thoát vói các kí tự đặc biệt tham khảo phần kiểu kí tự ở trên (Trang 10)
Bảng các toán tử của Java. - Giáo trình ngôn ngữ JAVA
Bảng c ác toán tử của Java (Trang 11)
Hình   :  Sơ đồ cấu trúc - structure chart - của chương trình - Giáo trình ngôn ngữ JAVA
nh : Sơ đồ cấu trúc - structure chart - của chương trình (Trang 19)
Hình   :   Sơ đồ dữ liệu - thủ tục xử lí - Giáo trình ngôn ngữ JAVA
nh : Sơ đồ dữ liệu - thủ tục xử lí (Trang 20)
Sơ đồ các đối tượng và truyền thông báo. - Giáo trình ngôn ngữ JAVA
Sơ đồ c ác đối tượng và truyền thông báo (Trang 20)

TỪ KHÓA LIÊN QUAN

w