Tải bản đầy đủ (.docx) (79 trang)

Bài giảng lập trình hướng đối tượng với Java

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 (364.4 KB, 79 trang )

1


2


MỤC LỤC

CHƯƠNG 1:

GIỚI THIỆU VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

1.1. Các phương pháp tiếp cận trong lập trình
Để phát triển một hệ thống phần mềm, hiện nay ta có hai cách tiếp cận cơ bản đó là:
1) Cách tiếp cận hướng chức năng – Function Oriented
3


2) Cách tiếp cận hướng đối tượng (Object Oriented)
=> Ta cần phân biệt những đặc trưng cơ bản nhất, đánh giá mặt mạnh, mặt yếu của
từng phương pháp để hiểu rõ chúng và áp dụng chúng một cách hiệu quả nhất.
1.1.1.Lập trình hướng chức năng (thủ tục)
Trọng tâm của cách tiếp cận này là các hàm chức năng. Chức năng chính của bài toán sẽ
thành những chức năng đơn giản hơn và thực hiện làm mịn dần từ trên xuống ( topdown).
Cấu trúc của chương trình được xây dựng theo cách tiếp cận hướng chức năng có dạng
như Hình H1-1.
Chương trình chính
main()

Hàm_1


Hàm_2

Hàm_4

Hàm_7

Hàm_3

Hàm_5

Hàm_8

Hàm_6

Hàm_9

Hình H1-1 Cấu trúc của chương trình hướng chức năng
 Kỹ thuật phân rã các chức năng (hàm) theo cách tiếp cận top-down để tạo ra cấu

trúc phân cấp.
 Chương trình được xây dựng theo cách tiếp cận hướng chức năng thực chất là

tập các chương trình con
4


 chương trình =Cấu trúc dữ liệu+giải thuật

*Ưu điểm
-Thuận tiện cho việc thiết kế dữ liệu và nắm bắt thông tin

-Phù hợp với các bài toán vừa và nhỏ
*Nhược điểm
-Nhiều hàm có thể sử dụng chung 1 CSDL và có thể thay đổi được giá trị=> khó kiểm
soát nhất là đối với những chương trình lớn và phức tạp.
-Gặp khó khăn khi thay đổi CSDL dẫn tới phải xây dựng lại toàn bộ cá hàm đã xây
dựng có liên quan
-Tính mở của hệ thống là kém không tận dụng được tài nguyên
-Việc tách rời dữ liệu ra khỏi chức năng xử lý dẫn tới việc che dấu và bảo vệ thông tin
trong hệ thống là kém.
1.1.2. Lập trình hướng đối tượng
-Chiến lược phát triển phần mềm hướng đối tượng là quan sát thế giới như tập các đối
tượng lấy đối tượng làm trung tâm.
-Hệ thống bằng tập hợp các đối tượng và quan hệ giữa các đối tượng.
VD: Để thực hiện xây một ngôi nhà ta cần 1 kiến trúc sư, 2 kĩ sư xây dựng, 6 thợ xây, 3
phụ vữa, vV…….
-Các đối tượng trao đổi với nhau bằng thông điệp (Message)
-Không phân tách dữ liệu và chức năng. Tiếp cận hướng đối tượng tập trung vào cả
thông tin và hành vi.
-Cho khả năng mềm dẻo, có khả năng kế thừa cao
Chương trình =
5


Đối tượng=∑ Cấu trúc dữ liệu+Giải thuật
Lập trình hướng đối tượng có hai đặc trưng cơ bản:
• Đóng gói dữ liệu: dữ liệu luôn được tổ chức thành các thuộc tính của lớp đối
tượng. Việc truy nhập đến dữ liệu phải thông qua các phương thức của đối tượng lớp.
• Sử dụng lại mã nguồn: việc sử dụng lại mã nguồn được thể hiện thông qua cơ
chế kế thừa. Cơ chế này cho phép các lớp đối tượng có thể kế thừa từ các lớp đối tượng
khác. Khi đó, trong các lớp kế thừa, có thể sử dụng các phương thức (mã nguồn) của

các lớp bị kế thừa, mà không cần phải định nghĩa lại.
1.2. Một số khái niệm của Lập trình hướng đối tượng
1.2.1. Đối tượng(Object)
Đối tượng là khái niệm cơ sở quan trọng nhất của phương pháp tiếp cận LTHĐT, đối
tượng là thực thể của hệ thống, cấu thành lên hệ thống các các khái niệm liên quan đến
hệ thống VD: KhachHang, HoaDon, MatHang.. vv
Đối tượng là khái niệm cho phép mô tả các sự vật, thực thể trong thế giới thực
Đối tượng=Trạng thái+Hành vi+Định danh
VD:Máy tính của tôi, SV Nguyễn Thị A
Trong đó:
*Trạng thái: là tập hợp của các giá trị của các thuộc tính mà đối tượng đang
Có tại một thời điểm.
VD:HP, HP Pavilion Entertaiment PC, Core i3, vv….
Nguyễn Thị A, Thái Bình, 1992, vv…
*Hành vi:Thể hiện chức năng của đối tượng trong hệ thống
Hành vi=Tập các phương thức
VD: khở động(), tắt(),xem ảnh().
Ăn(), Ngủ(), Học()
*Định danh thể hiện sử tồn tại duy nhất của đối tượng.
Serie HLSDF:34545353
Số CMTND: 090708308
6


Nhiệm vụ của Phân tích thiết kế hướng đối tượng là phân tích bài toán thành các đối
tượng và xác định được sử trao đổi thông tin giữa các đối tượng(các đối tượng trao đổi
với nhau bằng thông điệp)
1.2.2. Lớp các đối tượng (Class)
Lớp là khái niệm dùng để mô tả tập hợp các các đối tượng có cùng một cấu trúc, cùng
hành vi và có cùng mối quan hệ với các đối tượng khác.

VD: Sinh Viên, Máy tính Laptop
Lớp=các thuộc tính+Các phương thức
Sinh Viên
Thuộc tính
+Mã SV
+Họ tên
+Địa chỉ
+Năm sinh
+Chuyên ngành
……
Phương Thức
+Học()
+Thi()
……..
Lớp là sự trừu tượng hóa của đối tượng(tìm kiếm những điểm chung nhất(giống nhau)
bỏ qua những điểm khác nhau.
1.2.3. Bao bọc và che dấu thông tin.
Việc đóng gói dữ liệu và các hàm vào 1 đơn vị cấu trúc(gọi là lớp) được xem như là 1
nguyên tắc bao bọc và che dấu thông tin. Kỹ tuật này cho phép xác định các vùng đặc
trưng riêng, công khai bao gồm cả dữ liệu và các hàm nhằm điều khiển hoặc hạn chế
những truy nhập tùy tiện của những đối tượng khác
7


-Các hàm công khai của lớp sẽ đóng vai trò như giao diện của các đối tượng với phần
còn lại của hệ thống.
-Nguyên tắc bao bọc dữ liệu để ngăn cấm sự truy nhập trực tiếp trong lập trình được gọi
là che dấu thông tin.
Dữ liệu riêng
Hàm riêng

Dữ liệu công khai
Hàm công khai

VD:
Thuốc bổ
+Thành phần//dữ liệu công khai.
+Công dụng//dữ liệu công khai.
+Tác dụng phụ//dữ liệu công khai.
+Một số thành phần đặc biệt// dữ liệu che dấu.
+Cách dùng()//công khai.
+Cách sản xuất()//hàm che dấu.
1.2.4. Tính đa hình (polymorphism):
Thể hiện thông qua việc gửi các thông điệp (message). Việc gửi các thông điệp này có
thể so sánh như việc gọi các hàm bên trong của một đối tượng. Các phương thức dùng
trả lời cho một thông điệp sẽ tùy theo đối tượng mà thông điệp đó được gửi tới sẽ có
phản ứng khác nhau. Người lập trình có thể định nghĩa một đặc tính (chẳng hạn thông
qua tên của các phương thức) cho một loạt các đối tượng gần nhau nhưng khi thi hành
thì dùng cùng một tên gọi mà sự thi hành của mỗi đối tượng sẽ tự động xảy ra tương
ứng theo đặc tính của từng đối tượng mà không bị nhầm lẫn.
Thí dụ khi định nghĩa hai đối tượng "hinh_vuong" và "hinh_tron" thì có một phương
thức chung là "chu_vi". Khi gọi phương thức này thì nếu đối tượng là "hinh_vuong" nó
sẽ tính theo công thức khác với khi đối tượng là "hinh_tron".
8


1.2.4. Sự mở rộng, kế thừa
Nguyên lý kế thừa cho phép các đối tượng của lớp này được quyền sử dụng một số tính
chất(Dữ liệu, Hàm) của một lớp khác
-Một lớp có thể là lớp con(lớp dẫn xuất) của một lớp khác nghĩa là có thể bổ xung thêm
một số tính chất để thu hẹp phạm vi xác định của 1 đối tượng trong lớp mới cho phù

hợp với ngữ cảnh trong thực tế.
-Theo nguyên lý chung của đối tượng thì chỉ những thuộc tính và hàm thành phần công
khai là được quyền kế thừa còn những hàm thành phần riêng không được phép kế thừa.

1.2.5. Truyền thông điệp.
Nguyên lý trao đổi thông tin bằng cách truyền thông điệp cho phép chúng ta xây dựng
được những hệ thống mô phỏng gần hơn với thế giới thực.
Truyền thông điệp cho một đối tượng tức là phải báo cho nó phải thực hiện một việc,
một yêu cầu nào đó. Cách ứng xử của của đối tượng sẽ được mô tả trong các hàm công
khai
VD:
9


1.3. Các ngôn ngữ lập trình hướng đối tượng
C++,C#,Java
C++
Ngôn ngữ C++ được phát triển từ ngôn ngữ C. Có thể coi C++ là một cải tiến của C. Nó
mang đầy đủ các đặc tính của C. Một chương trình viết bằng C có thể biên dịch được
bằng trình biên dịch của C++. Ở những phiên bản đầu tiên, thực chất mã nguồn C++
đầu tiên được dịch sang mã nguồn C, rồi từ mã nguồn C tiếp tục được biên dịch tiếp.
C++ là ngôn ngữ lập trình hướng đối tượng, do vậy nó có đầy đủ các tính chất của một
ngôn ngữ lập trình hướng đối tượng: tính kế thừa, tính đóng kín và tính đa dạng.
Nhưng C++ không phải là ngôn ngữ hướng đối tượng hoàn toàn mà là ngôn ngữ "đa
hướng". Vì C++ hỗ trợ C lập trình hướng hành động và lập trình hướng đối tượng.
C++ kết hợp những ý tưởng hay nhất của lập trình có cấu trúc với việc phân chia một
bài toán thành các nhóm nhỏ có quan hệ với nhau, mỗi nhóm con đó là một đối tượng
chứa các lệnh và dữ liệu riêng của nó.
C++ đưa vào các khái niệm hàm ảo, quá tải hàm, quá tải toán tử cho phép tạo ra các
kiểu dữ liệu trừu tượng, hỗ trợ thừa kế bội.

Mục tiêu của C++ là tiếp cận những ý tưởng của phương pháp luận hướng đối tượng và
10


trừu tượng dữ liệu.
Các đặc tính của C ++ cho phép người lập trình xây dựng những thư viện phần mềm có
chất lượng cao phục vụ những đề án lớn.
C++ là ngôn ngữ thích hợp cho việc xây dựng những chương trình lớn như các hệ soạn
thảo, chương trình dịch, các hệ quản trị cơ sở dữ liệu, các hệ truyền thông, ...
C#

CHƯƠNG 2:NGÔN NGỮ JAVA
2.1 Đặc điểm ngôn ngữ Java
*Đơn giản: java được phát triển trên nền tảng C++ nhưng đơn giản hơn C++ rất
nhiều do không kế thừa bội(đa kế thừa), không sử dụng biến con trỏ không sử
dụng struct và Union
*Hướng đối tượng: Java được thiết kế xoay quanh mô hình hướng đối tượng vì
vậy java tiêu điểm là dữ liệu và các phương thức thao tác lên dữ liệu đó. Dữ liệu
và các phương pháp mô tả trạng thái và cách ứng xửa cảu một đối tượng trong
java.
*Phân tán Java là một ngôn ngữ thông dụng trong việc xây dựng các ứng dụng
trên mạng nói chung và ứng dụng web nói riêng.
*Trung lập kiến trúc hệ thống
Đây là khả năng một chương trình được viết tại một máy nhưng có thể cahy được
tại bất kì đâu.
*bảo mật cao
Java cung cấp một số lớp để kiểm tra bao mật và an toàn hệ thống.
*Khả năng đa tuyến
Chương trình java sử dụng kĩ thuật đa tiến trình (Multi Thread để thực thi các
công việc đồng thời và cung cấp giải pháp đồng bộ giữa các tiến trình)

11


2.2 Các dạng chương trình có thể phát triển với java.
1. Desktop Applications (J2SE)
Chươnng trình ứng dụng độc lập Console, và J2SE(giao diện đồ họa)
2.Server Applications J2EE
JSP và Servlets
3.Mobile Applications J2ME
2.3 Môi trường Java(java flatform)
Chương trình java có thể biên dịch và thực hiện trên mọi môi trường hệ điều
hành.
Môi trường java bao gồm 2 thành phần chính
+Máy ảo java(JVM java vitual Machine) là một khái niệm phần mềm dựa trên ý
tưởng là một máy tính ảo cung cấp môi trường thực thi cho chương trình java.
+Java API(java Application interface) là tập hợp gồm các thư viện và các lớp liên
quan và các giao diện lập trình được tổ chức thành các gói(packages)
Cài đặt:
+JDK(Java Develop Kit) 1.6
+Công cụ soạn thảo Elipse, Jcreator, NetBean 7.1
VD1: Test.java
Sử dụng NetBean tạo mới một project đặt tên Project Name “Test” vào phương
thức main của lớp Test sử dụng lện in ra dòng chữ “Xin chao”
package test;
public class Test {
public static void main(String[] args) {
// TODO code application logic here
System.out.println("Xin chao");
}
}

2.4. Cấu trúc 1 tiệp chương trình java
//Phần 1(Tùy chọn) Định nghĩa gói
Package <Tên gói>
//Phần 2( không hoặc nhiều) Khai báo các gói cần sử dụng
12


Import <Tên gói>
Phần 3 (Không hoặc nhiều) Định nghĩa các lớp và các giao diện
Class <Tên lớp>
{}
Interface <Tên giao diện>
{}
VD2: Trong cùng project “Test” tạo mới 1 gói đặt tên là VD2 tạo một lớp công
khai đặt tên là VD2.java viết hàm main thực hiện việc sau:
Nhập vào 1 xâu in ra xâu vừa nhập
package VD2;
import java.util.Scanner;// khai báo gói cần sử dụng lớp Scanner;
public class VD2 {
public static void main(String args[])
{ Scanner input=new Scanner(System.in);// khởi tạo 1 đối tượng thuộc lớp
Scanner
System.out.print("Nhap vao ho ten: ");
String ht=input.nextLine();
System.out.println("Ho ten vua nhap la: "+ht);
}
}
Tương tự làm các VD3:
Nhập vào 1 số in ra số vừa nhập
Nhập vào 2 số a, b in ra kết quả tổng của hai số đó.

Chú ý:
Tên tệp chương trình luôn có tên trùng với tên của một lớp công khai lớp chứa
hàm main nếu là chương trình ứng dụng.
Phương thức main luôn có dạng;
Public static void main(String args[])
{}
Nội dung của hàm main xác định tất cả các công việc để hệ thống thực hiện.
Trong chương trình java không có các khai báo tách rời khỏi lớp.
*Sử dụng gói(Package)
Package được dùng để đóng gói các lớp trong chương trình lại với nhau thành một khối.
Đây là một cách hữu hiệu để lưu trữ các lớp gần giống nhau hoặc có cùng một module
thành một khối thống nhất.
13


Để đặt tên package trong chương trình, người ta có thể tiến hành như đặt tên thư mục
trên ổ đĩa.
Nghĩa là bắt dầu bằng tên có phạm vi lớn, cho đến các tên có phạm vi nhỏ, cuối cùng là
tên các gói trực tiếp chứa các lớp. Phạm vi đặt tên gói, trên thực tế, được tiến hành theo
thứ tự phạm vi
lớn đến nhỏ như sau:
• Tên tổ chức
• Tên công ty
• Tên dự án
2.5 Các phần tử cơ sở của Java
2.5.1 Tên gọi( định danh)
-Định danh bao gồm một dãy các ký tự bao gồm chữ cái và chữ số và một số ký
tự đặc biệt định danh dùng để xác định các phần tử như: biến, kiểu biến, tên hàm,
tên lớp, tên đối tượng vv…
-Trong java định danh không bắt đầu bằng chữ số không chứa dấu”-“ phân biệt

chữ hoa và chữ thường.
VD:
Định danh không hợp lệ: 1sinhvien, Sinh-Vien, sinhVien ≠SinhVien
Định danh hợp lệ:
SinhVien,hoTen
2.5.2. Từ khóa
Các từ khóa của một ngôn ngữ lập trình là những định danh được định nghĩa
trước của ngôn ngữ và không dùng để đặt tên cho các thực thể khác.
import, class, abstract, interface, for, while,do vv..(đổi mầu với NetBean)
2.5.3 Chú thích
Chú thích giúp người lập trình và người đọc chương trình hiểu và theo dõi đoạn
mã chương trình.
Java cung cấp 3 loại chú thích.
1. Chú thích trên 1 dòng
//
2. Chú thích trên nhiều dòng
/*
14


*/
3. Chú thích trong tài liệu java.doc
/**
*/
2.6. Các kiểu dữ liệu nguyên thủy(cơ bản)
Trong mỗi ngôn ngữ lập trình đều định nghĩa một số kiểu dữ liệu cơ bản gọi là
những kiểu nguyên thủy
Các kiểu dữ liệu nguyên thủy của java được chia làm ba nhóm:

Kiểu Nguyên

Kiểu số nguyên: byte,short,int,long
Kiểu ký tự: char
Kiểu thực: float, double
Kiểu logic: boolean
Bảng B3.1 Miền xác định của các giá trị có kiểu nguyên thủy
Kiểu

Độ

rộng Giá trị cực tiểu

dữ liệu

(bits)

char

16

0x0

0xffff

byte

8

-128 (-27)

+127 (27-1)


short

16

-32768 (-215)

32767 (215-1)

int

32

- 231, 0x80000000

+ 231 - 1, 0x7fffffff

long

64

- 263

+ 263 – 1

float

32

1.40129846432481707 3.40282346638528860e+

e-45

Giá trị cực đại

38
15


double

64

4.94065645841246544 1.79769313486231570e+
e-324

308

 Mỗi kiểu nguyên thủy đều có một lớp bao bọc (Wrapper hay còn gọi lớp

nguyên thủy) tương ứng để sử dụng các giá trị nguyên thủy như là các đối
tượng. Ví dụ ứng với kiểu int có lớp Integer, ứng với char là Character, v.v.
 Mỗi kiểu dữ liệu nguyên thủy đều có miền xác định và các phép toán định

nghĩa trên nó.
2.7.Các phép toán và biểu thức.
2.7.1.
Các phép toán số học được chia thành hai loại:
3. 1/ Các phép toán 1 ngôi (đơn nguyên): + (cộng) và - (trừ), các phép đổi dấu,
4. 2/ Các phép toán 2 ngôi (nhị nguyên): * (nhân), / (chia), % (lấy modul -


phép chia lấy số dư), + (cộng) và - (trừ).
Chú ý:
Thứ tự thực hiện các phép toán số học hai ngôi là từ trái qua phải
VD int i=10%4*2; i=4;
Khi muốn thay đổi thứ tự ưu tiên thêm cặp() VD int i=10%(4*2);i=2;
Khi hai toán hạng khác nhau về kiểu thực hiện ép kiểu
Phép chia hai toán hạng đều là kiểu nguyên đòi hỏi mẫu #0.
Phieps chia số thực cho 0.0 là INF hoặc –INF
Trong java phép lấy phần dư thực hiện được cả với số thực float
m=11.5%2.5=1.5;
Các biểu thức tính toán với số nguyên trả về kiểu int khi gán với các biến
byte,short, char phải thực hiện ép kiểu tường minh.
2.7.2. Các phép toán logic
16


Các phép toán logic làm việc với các toán hạng kiểu boolean
Ký hiệu

Phép toán

&&

and

||

or

^


xor

!

not

VD: if((diemTB>=6.5)&&(diemTB<=7.0)
{xeploai=”kha”;
}
2.7.3. Toán tử điều kiện
Toán tử điều kiện là loại toán tử đặc biệt vì nó gồm ba thành phần cấu thành lên
biểu thức điều kiện.
<bt1>?<bt2>:<bt3>;
Bt1: là biểu thức logic(trả về gt true,false)
Bt2: là biểu trức trả về nếu bt1 =true;
Bt2: là biểu thức trả về nếu bt1=false;
VD: int a=4;int b=6;
int max=a>b?a:b;
2.7.4. Toán tử gán
Dùng để gán trá trị vào 1 biến
Kiểu Nguyên thủy.
VD: int k=6l;
int k1=k;
int p,q,r;
p=q=r=k;
Kiểu Tham chiếu
SinhVien sv1=new SinhVien();
SinhVien sv2=sv1;
2.7.5. Các toán tử quan hệ

-Trên các giá trị kiểu nguyên thủy
==,!=,>,<,>=,<=
if((SV1.diemTB>=6.5)&&(SV1.diemTB<=7.0)
17


{SV1.xepLoai=”kha”;
}
-Trên các giá trị kiểu tham chiếu đối tượng
Cho trước r và s là hai biến tham chiếu đối tượng
+r==s cho giá trị là true nếu r và s cùng tham chiếu đến 1 đối tượng ngược
lại cho giá trị là false;
+r!=s cho giá trị là true nếu r và s không cùng tham chiếu đến 1 đối tượng,
ngược lại cho giá trị là false;
VD:
SinhVien sv1=new SinhVien();
SinhVien sv2=new SinhVien();
SinhVien sv3=sv1;
Cho kết quả in ra của đoạn chương trình sau:
Đoạn 1:
if(sv1==sv2)
System.out.println(“True”);
else System.out.println(“False”);
Đoạn 2:
if(sv1==sv3)
System.out.println(“True”);
else System.out.println(“False”);
Đoạn 3:
if(sv1!=sv2)
System.out.println(“True”);

else System.out.println(“False”);
Đoạn 4:
if(sv1!=sv3)
System.out.println(“True”);
else System.out.println(“False”);
2.7.6 Các phép gán mở rộng.
18


Đối với các phép gán số học mở rộng (<op> là các phép toán số học – tác động trên các
toán hạng là số học) thì qui tắc cú pháp trên tương đương ngữ nghĩa với lệnh sau:
<var> = (<type>) (<var> <op> (<exp>));
Trong đó <type> là các kiểu số của <var>. Bảng B3.5 mô tả chi tiết hơn các phép gán
số học mở rộng.
Bảng B3.5 Các phép gán số học mở rộng
Câu

lệnh Cho trước kiểu số T của biến x và biểu

gán
x += e;

thức e
x = (T) (x + (e));

x -= e;

x = (T) (x - (e));

x *= e;


x = (T) (x * (e));

x /= e;

x = (T) (x / (e));

x %= e;

x = (T) (x % (e));

x&= e;

x = (T) (x | (e));

x|= e;
x^= e;
x<<= e;
x>>= e;
x>>>= e;

x = (T) (x ^ (e));
x = (T) (x << (e));
x= (T) (x>> (e));
x = (T) (x >>> (e));

b) Các phép gán logic mở rộng
Đối với các phép gán logic mở rộng (<op> là các phép toán logic, tác động trên các
toán hạng logic true, false), quy tắc (1) tương đương với công thức sau:
<var> = (<type>) (<var> <op> (<exp>));

19


Bảng B3.6 Các phép gán logic mở rộng
Các lệnh gán

Cho b và biểu thức e kiểu

b &&= e;

boolean
b = (b &&(e));

b ||= e;

b = (b || (e));

Ví dụ:
boolean b1 = false, b2 = false, b3 = true;
b3 &= b1 | b2;

// false vì b3 = (b3 & (b1 | b2));

2.8. Các quy tắc chuyển đổi kiểu.
Trong nhiều trường hợp đặc biệt ta thực hiện các phép gán mà hai toán hạng
không tương tích với nhau về kiểu(VD) trong trường hợp như vậy ta phải sử dụng
quy tắc ép kiểu
Quy tắc chung.
Qui tắc ép kiểu có dạng:
(<type>) <exp>

Trong đó:

<type>: kiểu dữ liệu cần ép sang
<exp>: là biểu thức cần ép kiểu cho giá trị trả vê của biểu thức

Tác dụng:
Lúc thực hiện hệ thống sẽ chuyển kết quả tính toán của biểu thức <exp> sang
kiểu được ép là <type>.
Kiểu nguyên thủy:
Ví dụ:
float f = (float) 100.15D; // Chuyển số 100.15 dạng kiểu double sang float
20


Lưu ý:


Không cho phép chuyển đổi giữa các kiểu nguyên thủy với kiểu tham chiếu,
ví dụ kiểu double không thể ép sang các kiểu lớp như HocSinh được.



Kiểu giá trị boolean (logic) không thể chuyển sang các kiểu dữ liệu số và
ngược lại.

Thu hẹp kiểu:
Đối với các kiểu dữ liệu nguyên thủy. giá trị của kiểu hẹp hơn(chiếm số byte ít
hơn) có thể được chuyển xang kiể rộng hơn(chiếm số byte nhiều hơn) mà tổn thất
về thông tin. Chuyển kiểu đó được gọi là mở rộng kiểu và không cần sử dụng quy
tắc ép kiểu.

VD: int i=6;
Float f=i; //ok
Nếu chuyển đổi theo chiều ngược lại từ kiểu rộng về kiểu hẹp được gọi là thu hẹp
kiểu(có thể mất mát thông tin) trong trường hợp như thế ta phải sử dụng quy tắc
ép kiểu tường minh.
VD: float f=6.6; int i=f; //Lỗi
Sử dụng quy tắc ép kiểu: int i=(int)f;// ok
*Các ngữ cảnh phải sử dụng quy tắc ép kiểu.
Thực hiện các phép gán đối với kiểu nguyển thủy hoặc kiểu tham chiếu
Thực hiện các lời gọi hàm
Thực hiện các tính toán số học
Chuyển đổi các kiểu khác kết hợp với kiểu xâu.
2.9. Biến và khai báo biến trong java.
[] <kiểu biến> < tên biến>[<=giá trị khởi tạo>]
VD: int i; public int k=9;
-Phân loại biến trong java
21


Trong java có 4 loại biến
1.Các biến dữ liệu thành phần
Là các thành phần của lớp thông thường là các thuộc tính mô tả lớp các đối tượng.
Và được khởi tạo giá trị mỗi khi một đối tượng của lớp được tạo ra.
2.Các biến cục bộ
Là các biến được khai báo trong các phương thức và các khối
3.Các biến tĩnh(static)
Cũng là các thành phần của lớp nhưng không phải đại diện cho từng đối tượng mà
đại diện cho cả lớp.
4. Các biến tham chiếu đối tượng.
Gọi tắt là các biến tham chiếu và kiểu lớp được gọi là kiểu tham chiếu là các biến

được sử dụng để xử lý các đối tượng. Biến tham chiếu phải được khai báo và khởi
tạo trước khi sử dụng
Chú ý: giá trị khởi tạo mặc định đối với kiểu Nguyên thủy và kiểu tham chiếu.
0,0.0 false;null
VD:
public class SinhVien {
String maSV,hoTen,diaChi;//biến dữ liệu thành phần
int namSinh; ;//biến dữ liệu thành phần
static int siSo;//biến tĩnh
float d1,d2,d3; static int siSo;//
float tinhDiemTB()
{ float diemTB; //biến cục bộ
diemTB=(d1+d2+d3)/3;
return diemTB;
}
}
public class CT {
public static void main(String args[])
{SinhVien sv1//biến tham chiếu đối tượng
}
}

22


CHƯƠNG 3: LỚP VÀ CÁC THÀNH PHẦN CỦA LỚP
3.1 Định nghĩa lớp
Định nghĩa lớp là đặc tả một kiểu dữ liệu mới và mô tả cách cài đặt kiểu dữ liệu đó
- Lớp là khuôn mẫu dùng để tạo ra đối tượng. Lớp định nghĩa dữ liệu trong một đối
tượng cùng những phương thức truy cập dữ liệu đó.

- Lớp có tính chất kế thừa: Một lớp có thể kế thừa các thuộc tính dữ liệu và các phương
thức của lớp khác
- Lớp có tính chất đa dạng: Cho phép cài đặt các lớp dẫn xuất (lớp con) rất khác nhau từ
cùng một lớp nguồn (lớp cha).
* Khai báo lớp
Cú pháp
[] class <Tên lớp> [extends <Tên lớp cha>] [implements diện>]
{
// Định nghĩa các vùng thuộc tính chứa dữ liệu thành phần của lớp
// Định nghĩa các hàm thành phần của lớp (toán tử tạo lập)
}
Trong đó:
class, extends, implements là các từ khoá. Những phần trong cặp [] là tùy chọn.
Những phần này sẽ được đề cập chi tiết ở các phần sau.
class Diem
{ int x,y
…………….
}
23


3.2. Định nghĩa các hàm thành phần
Hành vi của các đối tượng của một lớp được xác định bởi các hàm thành phần
của lớp đó.
[] <kiểu trả lại giá trị>

<tên hàm >(
thức>)[<mệnh đề throws>]

{<Nội dung của hàm>
}
Trong đó:
<kiểu trả lại gt> có thể là kiểu nguyên thủy hoặc kiểu tham chiếu hoặc không có
kiểu trả lại( thay bằng void)
<danh sách tham biến hình thức> bao gồm 1 dãy các tham biến(kiểu và tên) phân
cách với nhau bởi dấu,
VD:
public class Diem {
float x,y;
Diem(){}
public void nhapTTDiem()
{ Scanner input=new Scanner(System.in);
System.out.print("Nhap vao toa X: ");
x=input.nextFloat();
System.out.print("Nhap vao toa Y: ");
y=input.nextFloat();
}
24


public void inTTDiem()
{System.out.println("X: "+x+" Y: "+y);
}
public double tinhKhoangCach(Diem d1)
{ double d=Math.sqrt((x-d1.x)*(x-d1.x)+(y-d1.y)*(y-d1.y));
return d;
}
public class ThucHanhSo1 {
public static void main(String[] args) {

// TODO code application logic here
Diem d1=new Diem();
Diem d2=new Diem();
System.out.println("Nhap thong tin cho diem 1");
d1.nhapTTDiem();
System.out.println("Nhap thong tin cho diem 2");
d2.nhapTTDiem();
System.out.println("Hai diem vua tao la ");
d1.inTTDiem();
d2.inTTDiem();
System.out.println("Khoang cach d1 va d2 la: "+d1.tinhKhoangCach(d2));
System.out.println("Khoang cach d2 va d1 la: "+d2.tinhKhoangCach(d1));
25


×