1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Xây Dựng Phần Mềm Hướng Đối TượngOOP(Object Oriented Programming)
Th.s Hồ Đình Khả
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nội dung
Chương 1: Tổng quan OOP
Chương 2: Ngôn ngữ Java và công cụ
Chương 3: Cài đặt Class và Object
Chương 4: Cấu trúc tuyển tập.
Chương 5: Lưu trữ (file, DBMS)
Chương 6: Thiết kế GUI.
Chương 7: Mô hình N-Layer
Chương 8: Report
Chương 9: Mô hình phân bố. (Option)
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Hình thức đánh giá:
Thi cuối kì: Thực hiện một ứng dụng trên máy.
Tài liệu tham khảo:
[1] Michael A.Smith, Java: an Object-Oriented Language, McGraw-Hill, 2000.
[2] Prof. Alfons Kemper, Ph. D.: Object oriented Data modeling And programming In java,2000
[3] Copyright by Sams Publishing :Sams Teach Yourself Object Oriented Programming in 21 Days, 2002
JEDI
Slide Bài Giảng- ĐHCNSG
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Chương 1
Tổng Quan OOP
(Object Oriented Programming)
2
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Mục tiêu
Object Oriented Programming
Trừu tượng hóa dữ liệu (Data Abstraction)
Lớp và đối tượng (Class and Object )
Phương thức thiết lập và hủy(Construction và Destruction )
Persistence, Data encapsulation, Inheritance vàPolymorphism
Thuận lợi.
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Object-oriented programmings
Phương pháp thiết kế và hiện thực các hệ thống phần mềm.
Đặt trọng tâm vào đối tượng.
Đối tượng bao hàm: hành vi và thuộc tính
Đối tượng giao tiếp thông qua thông điệp
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
So sánh lập trình cấu trúc và Lập trình OOP
Procedural programming :Bao gồm một tập các chức năng (functions hay algorithms) giải quyết vấn đề
Algorithms + Data Structures = Programs
OOP : đầu tiên diễn đạt dữ liệu (data), sau đó tìm kiếm các giải thuậtđiều hành dữ liệu.
Ví dụ:
Viết chương trình tính lương nhân viên. Lương được trả dựa vào : số giờ hay phụ cấp. Ngoài ra lương còn phải khấu trừ thuế (Social Security và Medicare)
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Lập trình cấu trúc
Chia bài toán thành những vấn đề nhỏ , ứng với mỗi vấn đề nhỏ, mộtthủ tục được viết. Chương trình chính được viết bằng cách sử dụngcác thủ tục theo một trình tự xử lí.
Chúng ta cần viết các thủ tục tương ứng:
computePay(): cung cấp dữ liệu
computeSSTax ()
computeMedicareTax(),...
3
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Object-Oriented Programming
Xác định các objects trong bài toán.
Employees, Company
Xây dựng các class mô tả attributes và behaviors của đối tượng.
Viết chương trình tính lương nhân viên. Lương được trả dựavào : số giờ hay phục cấp. Ngoài ra lương còn phải khấu trừ thuế(Social Security và Medicare)
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Object-Oriented Programming
Xác định các objects trong bài toán.
Employees, Company
Xây dựng các class mô tả attributes và behaviors của đối tượng.
Attributes của đối tượng Employee sẽ là cái gì mà employee “has”, vídụ : name, address, employee number, Social Security number, hoursworked ... variables
Behaviors của Employee là cái gì mà employee “does”, ví dụ: lươngphải trả, mail bảng lương,… methods
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Procedural Programming và Object-Oriented Programming
Nếu thủ tục trong lập trình cấu trúc cần dữ liệu để thực hiện tác vụ, dữliệu được truyền vào thủ tục
Với lập trình OOP, đối tượng thực hiện nhiệm vụ cho bạn, các phươngthức có thể truy xuất dữ liệu mà không phải truyền nó vào phươngthức.
Viết chương trình tính diện tích, chu vi hình chữ nhật
Viết chương trình tính diện tích, chu vi hình tròn
Viết chương trình tính điểm trung bình của sinh viên, điểm trungbình= (điểm lý thuyết + điểm thực hành)/2. Chương trình chophép nhập thông tin sv, tính điểm trung bình, in điểm sv
VVíí DDụụ::
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Data Abstraction
Cho phép quản lí tốt hơn các chương trình phức tạp
Functions & Procedures
Modules
Abstract Data Types
Class/Objects
Data Abstract cho phép
Mở rộng ngôn ngữ : Định nghĩa thêm kiểu
Chế tác các thể hiện dữ liệu khác nhau
4
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Data Abstraction
Các đặc trưng của Person
Name
Address
Age
Height
Hair color
Các đặc trưng củaCustomer
NameAddress
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Data Abstraction (tiếp...)
Phát sinh hóa đơn
Chấp nhận tên người bánNgười bán (saleman)
Chấp nhận kiểu xe đặt hàngKiểu xe mua
Chấp nhận địa chỉ khách hàngĐịa chỉ khách hàng
Chấp nhận tên khách hàngTên khách hàng
Hành độngThuộc tính
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Data Abstraction (tiếp…)
Data Abstraction là quá trình nhận diện và nhóm dữ liệu vàhành động có liên quan tới một thực thể riêng biệt .
Thuận lợi:
Nhận diện các đặt trưng và hành động thiết yếu
Giúp lọai trừ những chi tiết không cần thiết.
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Class Một Class định nghĩa như là một bản mẫu hay một kiểu chung về một lọai đối
tượng nào đó theo thuộc tính và hành vi.
Chấp nhận lọai xe đặt mua
Chấp nhận tên người bán
Phát sinh hóa đơn
Chấp nhận địa chỉ
Chấp nhận tên
Tên người bán
Kiểu xe mua
Địa chỉ khách hàng
Tên khách hàng
Class Customer
5
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Class/Object
Message Passing
Generalization/Specialization
Polymorphism
Relationships: Associations, Aggregations
Behaviors
Rules
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Object
Một Object là sự thể hiện của class
Stephen Boston Opel Astra Robin
Stephen là một Object của class Customer
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Object (tiếp…)
Attribute
Những đặc trưng mô tả đối tượng.
Operation
Là một dịch vụ hoặc một hàm đuợc cung cấp bởi mọi thể hiện của một lớp đối tượng.
Method
Diễn tả cách thức mà một đối tượng vận động, phản ứng
Message
Yêu cầu cho một operation
Event
Tác nhân được gởi từ một object to object khác.
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
So Sánh Class và Object
Class định nghĩa một thực thể, trong khi một object là một thực thể thực sự.
Class là một mô hình ý niệm,định nghĩa tất cả đặt trưng vàhành động của một object, trong khi đối tượng là một mô hình thực.
Class là một prototype của một object
Tất cả object thuộc về một class đều có đặt trưng và hành động giống nhau.
6
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Các bài toán ví dụ
Viết chương trình tính diện tích, chu vi hình chữ nhật
Viết chương trình tính diện tích, chu vi hình tròn.
Viết chương trình tính điểm trung bình của sinh viên, điểm trungbình= (điểm lý thuyết + điểm thực hành)/2. Chương trình chophép nhập thông tin sv, tính điểm trung bình, xuất thông tin sv.
Object: Hình chữ nhật Class
Attributes: Chiều dài, chiều rộng Variables
Behaviors: Tính diện tích, tính chu vi Methods
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Các bài toán ví dụ
Viết chương trình tính diện tích, chu vi hình chữ nhật
Viết chương trình tính diện tích, chu vi hình tròn
Viết chương trình tính điểm trung bình của sinh viên, điểm trungbình= (điểm lý thuyết + điểm thực hành)/2. Chương trình chophép nhập thông tin sv, tính điểm trung bình, xuất thông tin sv
Object: Hình tròn Class
Attributes: Bán kính Variables
Behaviors: Tính diện tích, tính chu vi Methods
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Các bài toán ví dụ
Viết chương trình tính diện tích, chu vi hình chữ nhật
Viết chương trình tính diện tích, chu vi hình tròn
Viết chương trình tính điểm trung bình của sinh viên, điểm trungbình= (điểm lý thuyết + điểm thực hành)/2. Chương trình chophép nhập thông tin sv, tính điểm trung bình, in điểm
Object: Sinh viên Class
Attributes: Mã sv, họ tên, ngày sinh, nơi sinh, lớp, môn học, điểm lý thuyết, điểm thực hành, điểm trung bình Variables
Behaviors: Nhập thông tin sinh viên, tính điểm trung bình, in điểmMethods
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Mô hình hóa đối tượng
ClassName
- Attributes
+ Behaviors
Properties
Data
Fields
Variables
Instance Data
Methods
7
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Mô hình hóa đối tượng
Object: Hình chữ nhật Class
Attributes: Chiều dài, chiều rộng Variables
Behaviors: Tính diện tích, tính chu vi Methods
HHììnhnh chchữữ nhnhậậtt
- Chiều dài
- Chiều rộng
+ Tính diện tích
+ Tính chu vi
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Mô hình hóa đối tượng
HHììnhnh tròntròn
- Bán kính
+ Tính diện tích
+ Tính chu vi
Object: Hình tròn Class
Attributes: Bán kính Variables
Behaviors: Tính diện tích, tính chu vi Methods
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Constructor, Destructor,Persistence
Thiết lập (Constructor):
Cấp phát bộ nhớ.
Khởi tạo thuộc tính.
Cho phép truy xuất các thuộc tính và phương thức.
Huỷ (Destructor)
Giải phóng không gian cấp phát.
Cấm truy xuất các thuộc tính và phương thức.
Tính bền vững (Persistence)
Tính bền vững là một khả năng của đối tượng để lưu trữ dữ liệu trong thời gian sống của đối tượng.
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Bao Bọc và Che Dấu Thông tin (Encapsulation and information hiding)
Quá trình che dấu sự hiện thực chi tiết của một đối tượng từ user được gọi là Encapsulation.
Nguyên tắc bao bọc dữ liệu ngăn cấm truy nhập trực tiếp gọi là sựche dấu thông tin
Thuận lợi: Tất cả thuộc tính và phương thức được yêu cầu thực hiện một
công việc có thể được khởi tạo. Chỉ những thuộc tính và/hoặc phương thức được truy xuất bởi
cái khác được hiện rõ. Tất cả những gì thấy được của đối tượng đã được đóng gói là các
phương thức giao tiếp (interface) của đối tượng.
8
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tính thừa kế (Inheritance)
Cách tổ chức các Classes
Vehicle
Automobile Motorcycle Bus
Sedan Sports Car School BusLuxury Bus
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tính thừa kế (tt)
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tính thừa kế (tt...)
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tính thừa kế (tt…)
Inheritance
Cơ chế cho phép một lớp chia sẽ các thuộc tính và thao tác được định nghĩa trong một hay nhiều lớp.
Subclass
Là một class thừa kế từ một class khác.
Super class
Là một class mà từ đó một class khác thừa kế những hành vi của nó.
Multiple Inheritance
Là một class con thừa kế từ một hay nhiều lớp.
9
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tính Đa Hình (Polymorphism)
Text Line Picture
Làm thế nào?
OperationDisplay
Tính đa hình là một thao tác có thể được cài đặt khác nhau trong cùng một lớp hay trong những lớp khác nhau.
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Các bước thiết kế
Thiết kế và coding Thiết kế
Định nghĩa vấn đề. Thiết kế các đối tượng Phát triển các giải thuật cho các phương thức
của đối tượng. Mô tả giải thuật, dùng pseudocode Viết code Kiểm tra code Debug
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Những thuận lợi. Khả năng đối phó với những ứng dụng thuộc lọai khó.
Nâng cao tính nhất quán giữa phân tích, thiết kế và lập trình.
Nâng cao chia sẽ trong ứng dụng.
Tính dùng lại của những kết quả phân tích thiết kế và lập trình.
Giảm bớt các lỗi.
Sự thay đổi nhanh hơn.
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tổng kết
Phương pháp Object-oriented cho phép giải quyết hầu hết các vấn đề.
Sự trừu tượng dữ liệu là quá trình nhận diện và nhóm các thuộc tính và hành động quan hệ tới một thực thể cụ thể.
Class định nghĩa một thực thể, trong khi một object là một thực thểthực sự.
Construction và Destruction
Persistence, Data encapsulation, Inheritance và Polymorphism
10
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Câu hỏi Các đối tượng trong thế giới thực chứa ___ và ___. Một trạng thái của đối tượng được lưu trữ trong ___. Một hành vi của đối tượng được phơi bày thông qua ___. Các dữ liệu nội tại được che đậy từ thế giới bên ngòai và chỉ truy xuất qua phương thức
được biết như dữ liệu ___. Bản thiết kế cho một đối tượng phần mềm được gọi là ___. Hành vi chung, phổ biến có thể được định nghĩa trong ___ và được thừa kế vào ___ Một tập phương thức với không hiện thực được gọi là ___.
1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Chương 2
Giới Thiệu JAVA
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 2 of 19
Mục Tiêu
Hiểu biết các đặt trưng của ngôn ngữ JAVA
Phân cấp các dạng chương trình JAVA
Định nghĩa Java Virtual Machine
Hiểu biết nội dung của Java Development Kit
Phân cấp các đặc trưng mới trong JAVA2
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 3 of 19
Java?
Đơn giản Hướng đối tượng. Không phụ thuộc nền. Vững bền. Bảo mật. Phân bố. Đa luồng. Động.
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 4 of 19
Cách truyền thống biên dịch chương trình
2
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 5 of 19
Compiling code
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 6 of 19
Các dạng Chương Trình Java Applets
Command Line Applications
GUI Applications
Servlets
Database Applications
Web
EJB
Mobile App
JFX App
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 7 of 19
Các Thành Phần Của Môi Trường Java
Ngôn ngữ Java
Bytecode
Các thư viện Class Java/Sun
Java Virtual Machine
Cấu trúc tập tin * .class
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 8 of 19
Java Virtual Machine
Là một phần mềm khái niệm dựa trên ý tưởng của một máy tính ảo.
Là một tập các lệnh luận lí định nghĩa các tác vụ của một máy tính.
Có thể được xem như một hệ điều hành mini.
Một lớp của sự trừu tượng cho:
Nền phần cứng.
Hệ điều hành.
Mã được biên dịch.
3
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 9 of 19
Các Bước Biên Sọan Một Chương Trình Java Compiler chuyển mã nguồn vào một tập các lệnh, không cần
đích tới cho một processor cụ thể. Interpreter chuyển một tập các lệnh cho phần cứng. JVM khởi tạo một hệ thống runtime giúp cho quá trình thực
thi mã bởi: Nạp các tập tin *.class. Quản lí bộ nhớ. Thực thi ứng dụng
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 10 of 19
Xác định các tập tin .class Áp dụng cho tất cả file *.class , đảm bảo an tòan.
Ba phần của file *.class :
bytecodes Thông tin của class Thuộc tính của class và các tính chất.
Tập tin .class độc lập bao gồm: Các field bao gồm thuộc tính và tính chất. Bảng phương thức với thuộc tính và tính chất của nó. Bảng giao tiếp và hằng số với vác thành phần của nó.
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 11 of 19
Xác định các tập tin .class (tt…) Tập tin .class mang ra ngòai ở 4 mức:
Kiểm tra cú pháp.
Tính nhất hóan của tập tin .class.
Bytecode hòan chỉnh.
runtime
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 12 of 19
Java Development Kit Java 1.0 - The first release in 1995
Java 1.1 - The 1997 release
Java 2 - The latest version
1.4
1.5
1.6
………………
4
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 13 of 19
JDK Tools Java Compiler, 'javac' :
Dịch chuyển mã nguồn sang mã byte
javac [options] sourcecodename.java
Java Interpreter, 'java' Bộ thông dịch (thực thi)
java [options] classname
Java Dissembler, 'javap' Bộ tạo lập header của C cho phép chương trình C gọi phương thức của JAVA và ngược lại.
javap [options] classname
Documentation tool, 'javadoc' Bộ tạo tài liệu dạng HTML từ mã nguồn cùng các chú thích bên trong.
javadoc [options] sourcecodename.java
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 14 of 19
JDK Tools (tt…) Java Debugger, 'jdb‘
Bộ gỡ lỗi
jdb [options] sourcecodename.java
OR
jdb -host -password [options] sourcecodename.java
Applet viewer, 'appletviewer‘Thực thi các ứng dụng nhúng.
appletviewer [options] sourcecodename.java / url
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 15 of 19
Core Java API java.lang
java.applet
java.awt
java.io
java.util
java.net
java.awt.event
java.rmi
java.security
java.sql
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 16 of 19
Java 2
Swing
Drag and Drop
Java 2D API
Java Sound
RMI
5
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Core Java / Session 3 / 17 of 19
Summary
Java là một ngôn ngữ chương trình thông dịch và biên dịch.
Các tình huống trong Java: Simple, Object-oriented, Platform-independent, Robust, Secure, Distributed, Multithreaded, Dynamic
Java Virtual Machine
Java Development Kit
Tình huống mới trong Java 2
1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Chương 2
Ngôn Ngữ Java
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Mục Tiêu
Phiên dịch một chương trình Java
Hiểu biết cơ bản ngôn ngữ Java
Kiểu dữ liệu
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
VD Java program
// This is a simple program called “First.java”
class First{
public static void main(String args[]){
System.out.println(“My first program in Java”);}
}
C:\jdk1.4\bin>javac First.java
C:\jdk1.4\bin>java First
Kết quả:
My first program in Java
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Truyền các đối số dòng lệnh
class Pass{
public static void main(String parameters[]){
System.out.println("This is what the main method received"); System.out.println(parameters[0]);System.out.println(parameters[1]);System.out.println(parameters[2]);
}}
2
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Truyền các đối số dòng lệnh(tt…)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Cơ Sở Của Ngôn Ngữ Java
Classes & Methods
Data types
Variables
Operators
Control structures
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Khai báo Class
Cú pháp khai báo Class
class Classname {
var_datatype variablename;:
met_datatype methodname(parameter_list):
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
VD class
3
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nested Classes
Định nghĩa một class bên trong một class khác gọi là ‘Nesting’.
class OuterClass {
... class NestedClass { ... }
}
Được chia vào các dạng: Static: được gọi là “static nested classes “
Non-static: được gọi là “inner classes “
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Các dạng Data
Primitive Data TypesByteCharBooleanShort,int,longFloat, double
Reference data types
Array
Class
Interface
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Chuyển kiểu
Một dạng dữ liệu được chuyển vào một dạng khác
Ẩn: Thấp->Cao:byte --> short --> int --> long --> float --> double
For example:
double x;
int n = 5;
x = n;
n = x;//không hợp lệ Hiện:
float c = 34.89675f;
int b = (int)c + 10;
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
So Sánh 2 Dạng Dữ liệu
primitive data Đơn giản nhất. Không thể phân chia Chỉ có trị không method VD:
int - integerdouble – floating point (real)char - character
class
Phức tạp hơn.
Nhóm của các dạng khác(primitive hay class)
Bao gồm data và methods
VD:SavitchInString
4
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Biến (Variables)
Khai báo biến gồm 3 phần:
Kiểu dữ liệu.
tên
Giá trị khởi tạo.
Cú pháp:
datatype identifier [=value][, identifier[=value]...];
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tên biến
Qui định Không bắt đầu với số. Chứa số,kí tự, (_) và $
(tránh dùng) Phân biệt hoa và thường
(ThisName và thisName làkhác nhau)
Nên Nên đặt tên có nghĩa
(eggsPerBasket hơn là count) Bắt đầu với kí tự thường. Hoa đầu từ (eggsPerBasket
hơn là eggsperbasket) Tránh dùng $.
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Từ khóa
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Khai báo Array
Có 3 cách:
datatype identifier [ ];
datatype identifier [ ] = new datatype[size];
datatype identifier [ ]= {value1,value2,….valueN};
5
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Các phương thức trong Class
Định nghĩa một tác vụ trên một đối tượng.
Cú pháp:access_specifier modifier datatype method_name(parameter_list)
{
//body of method
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
VD
class Temp {static int x = 10; // variablepublic static void show( ) { // method
System.out.println(x);}public static void main(String args[ ]) {
Temp t = new Temp( ); // object 1t.show( ); // method callTemp t1 = new Temp( ); // object 2t1.x = 20; t1.show( );
}}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Phạm Vi truy cập của Method
public
private
Protected
default
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Arithmetic Operators
+ Addition
- Subtraction
* Multiplication
/ Division
% Modulus
++ Increment
-- Decrement
+= Addition and assignment
-= Subtraction and assignment
*= Multiplication and assignment
/= Division and assignment
%= Modulus and assignment
6
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Bitwise Operators
~ Bitwise unary NOT
& Bitwise AND
| Bitwise OR
^ Bitwise exclusive OR
>> Shift right
<< Shift left
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Relational Operators
== Equal to
!= Not equal to
< Less than
> Greater than
<= Less than or equal to
>= Greater than or equal to
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Logical Operators
&& Logical AND
|| Logical OR
^ Logical XOR
! Logical unary NOT
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Conditional Operator
Cú phápexpression1 ? expression2 : expression3;
expression1Biểu thức luận lí
Expression2Trị trả về nếu expression1 bằng True
expression3Trị trả về nếu expression1 bằng False
7
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Assignment Operator = phép gán
Các giá trị có thể gán tới nhiều biến
Example
a = b = c = d = 90; //nhập nhằng
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Độ ưu tiên Operator
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Định Dạng Xuất
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
if-else statement
Cú pháp
if (condition)
{
action1 statements;
}
else
{
action2 statements;
}
8
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
switch-case statement
Cú phápswitch (expression){
case 'value1': action1 statement(s);break;
case 'value2': action2 statement(s);break;
::case 'valueN': actionN statement(s);
break;default: default_action statement(s);
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
while loop
Cú pháp
while(condition) {
action statements;::
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
do-while loop
Cú pháp
do {
action statements;::
} while(condition);
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
for loop
Cú pháp
for(initialization statements; condition; increment statements)
{
action statements;
:
:
}
9
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Branch statement
Break
Continue
Return
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tổng kết
Cấu trúc chương trình JAVA
Định danh, từ khóa ,tóan tử.
Các kiểu dữ liệu - Primitive và Reference
Phạm vi truy nhập: public,. …
Thiết lập - ẩn và hiện.
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tổng kết
Operators: Arithmetic Bitwise Relational Logical Conditional Assignment
Flow Controls: if-else statement switch-case statement while loop do-while loop for loop
1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nhập dữ liệu từ Keyboard
Chương 2
HƯỚNG ĐỐI TƯỢNGTrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
NỘI DUNG
Nhập dữ liệu từ Keyboard
Sử dụng class BufferedReader nhập dữ liệu từ bàn phím thông qua console
Sử dụng class Scanner nhập dữ liệu từ bàn phím thông qua console
Sử dụng class JOptionPane nhập dữ liệu từ bàn phím thông qua GUI (Graphic User Interface)
HƯỚNG ĐỐI TƯỢNGTrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Sử dụng BufferedReader
Class BufferedReader trong Package java.io;
Các bước nhập dữ liệu:
Thêm lệnh vào đầu chương trình:
import java.io.*;
Thêm lệnh:
BufferedReader dataIn = new BufferedReader( new InputStreamReader(System.in) );
Khai báo biến kiểu String chứa tạm dữ liệu nhập:
String temp = dataIn.readLine();
HƯỚNG ĐỐI TƯỢNGTrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụimport java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class GetInputFromKeyboard {
public static void main( String[] args ){
BufferedReader dataIn = new BufferedReader(new InputStreamReader( System.in) );
String name = "";
System.out.print("Nhập tên:");
name = dataIn.readLine();
System.out.println("Xin chào " + name );
}
Import java.io.*
2
HƯỚNG ĐỐI TƯỢNGTrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Sử dụng Scanner
Class Scanner trong Package java.util;
Các bước nhập dữ liệu:
Thêm lệnh vào đầu chương trình:
import java.util.*;
Thêm lệnh:
Scanner datain=new Scanner(System.in);
Khai báo biến kiểu String chứa tạm dữ liệu nhập:
String temp=datain.nextLine();
HƯỚNG ĐỐI TƯỢNGTrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụimport java.util.Scanner;
public class GetInputFromKeyboard {
public static void main( String[] args ){
Scanner dataIn = new Scanner(System.in) );
String name = "";
System.out.print("Nhập tên:");
name = dataIn.nextLine();
System.out.println("Xin chào " + name );
}
Import java.util.*
HƯỚNG ĐỐI TƯỢNGTrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Sử dụng JOptionPane
Class JOptionPane trong Package javax.Swing;
Các bước nhập dữ liệu:
Thêm lệnh vào đầu chương trình:
import java.swing.*;
Thêm lệnh:
name=JOptionPane.showInputDialog(“Nhap ten");
HƯỚNG ĐỐI TƯỢNGTrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụimport javax.swing.JOptionPane;
public class GetInputFromKeyboard {
public static void main( String[] args ){
String name = "";
name=JOptionPane.showInputDialog(“Nhap ten");
String msg = "Hello " + name ; JOptionPane.showMessageDialog(null, msg);
} }
Import javax.swing.*
3
HƯỚNG ĐỐI TƯỢNGTrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Chuyển đổi kiểu
Chuỗi sang số:
Số nguyên: Integer.parseInt(String a);
String a=“123”;
int dataint=Integer.parseInt(a);
Số thực:
String a=“123”;
double dataint=Double.parseDouble(a);
Số sang chuỗi:
String s=Integer.toString(int i);
String s=Double.toString(double i);
1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Khai báo Class
Chương 3
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
NỘI DUNG
• Tạo Class
• Tạo object
• Nạp chồng (Overloading method)
• Bao Đóng (Encapsulation)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Cấu trúc Class
<modifier> class <Name>
{
<attribute>*
<constructor>*
<method>*
}
public class StudentRecord
{
}
Lưu ý:
- Tên class nên bắt đầu bằng chữ Hoa
- Tên tập tin của class phải trùng tên với tên class
StudentRecord.java
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Writing class HinhChuNhat
class HinhChuNhat{
double cdai, crong;
public double DienTich(){
return cdai * crong;}
public double ChuVi(){
return (cdai + crong)*2;}
}
HinhChuNhat
- cdai : double
- crong : double
+ DienTich() : double
+ ChuVi() : double
2
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Writing class HinhTron
class HinhTron{
double bkinh; public double DienTich(){
return Math.PI * bkinh * bkinh;} public double ChuVi(){
return 2 * Math.PI * bkinh;}
}
HinhTron
- bkinh : double
+ DienTich() : double
+ ChuVi() : double
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Constructor
Constructor là một phương thức đặc biệt trong class nó đượcviện dẫn khi tạo đối tượng
Mục đích của constructor cho phép các field của của object được khởi tạo khi object được thể hiện
Một constructor hợp lệ thỏa mãn:
Tên trùng tên với class
Không khai báo return value, không void
Một class có thể có nhiều constructors
Nếu không khai báo constructor, java sẽ mặc định constructor không tham số.
public ClassName (parameterList)
{
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Writing class HinhChuNhat
class HinhChuNhat{
double cdai, crong;
public HinhChuNhat (double cd, double cr) {cdai = cd;crong = cr;
}
public double DienTich() {return cdai * crong;
}
public double ChuVi() {return (cdai + crong)*2;
}}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Writing class HinhTron
class HinhTron{
double bkinh;public HinhTron (double bk) {
bkinh = bk;}public HinhTron () {
bkinh = 0.0;}public double DienTich() {
return Math.PI * bkinh * bkinh;}public double ChuVi() {
return 2 * Math.PI * bkinh;}
}
3
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Sử dụng Constructor
Một constructor phải được viện dẫn khi tạo đối tượng. Sử dụngtừ khóa new
Ví dụ:
HinhChuNhat n;
n = new HinhChuNhat(3,6);
HinhChuNhat x = new HinhChuNhat(5,8);
HinhTron t = new HinhTron();
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Sử dụng Constructor của class HinhTron
class HinhTron{
double bkinh;public HinhTron (double bk){
bkinh = bk;}public HinhTron () {
bkinh = 0.0;}
public double DienTich() { return Math.PI * bkinh * bkinh;
}public double ChuVi() {
return 2 * Math.PI * bkinh;}
}
Ví dụ:
HinhTron t1 = new HinhTron(8.9);
HinhTron t2 = new HinhTron();
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Sử dụng this trong Constructor
Tránh lập lại code, gọi mộtconstructor trong một khởidựng khác của cùng mộtclass
Lệnh this phải xuất hiện ởdòng đầu tiên
class class HinhChuNhatHinhChuNhat{{
double double cdaicdai, , crongcrong;;public public HinhChuNhatHinhChuNhat()(){{
this(0,0);this(0,0);}}public public HinhChuNhatHinhChuNhat (double (double cdcd, double , double crcr)){{
cdaicdai = = cdcd;;crongcrong = = crcr;;
}}public double public double DienTichDienTich()(){{
return return cdaicdai * * crongcrong;;}}public double public double ChuViChuVi()(){{
return (return (cdaicdai + + crongcrong)*2;)*2;}}
}}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nội Dung
• Tạo Class
• Tạo object
• Nạp chồng (Overloading method)
• Bao Đóng (Encapsulation)
4
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Thể hiện Object
Từ khóa new được dùng để tạo một thể hiện của object
Ví dụ:HinhChuNhat n1 = new HinhChuNhat();
HinhChuNhat n2 = new HinhChuNhat(8,10);
HinhTron t;
t = new HinhTron(5.5);
ClassName object = new ClassName (…);
ClassName object;
object = new ClassName (…);
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Truy xuất Fields và Methods
class class HinhChuNhatHinhChuNhat{{
double double cdaicdai, , crongcrong;;public public HinhChuNhatHinhChuNhat()(){{
this(0,0);this(0,0);}}public public HinhChuNhatHinhChuNhat (double (double cdcd, double , double crcr)){{
cdaicdai = = cdcd;;crongcrong = = crcr;;
}}public double public double DienTichDienTich()(){{
return return cdaicdai * * crongcrong;;}}public double public double ChuViChuVi()(){{
return (return (cdaicdai + + crongcrong)*2;)*2;}}
}}
…
public static void main(String[] agrs)
{
double dt1, dt2, cv1, cv2;
HinhChuNhat n1 = new HinhChuNhat();
dt1 = n1.DienTich();
cv1 = n1.ChuVi();
// xuat ket qua tinh n1…
HinhChuNhat n2 = new HinhChuNhat(8,10);
dt2 = n2.DienTich();
cv2 = n2.ChuVi();
// xuat ket qua tinh n2…
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nội Dung
• Tạo Class
• Tạo object
• Nạp chồng (Overloading method)
• Bao Đóng (Encapsulation)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Overloading method
Overloading method :
Các phương thức có cùng tên trong cùng class.
Có danh sách đối số khác nhau (số lượng, kiểu, thứtự)
Compiler nhận diện phương thức thông qua danhsách đối số.
Kiểu trả về khác nhau của phương thức không đượcgọi là overloading method
5
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Overloading method
float tryMe (int x){
return x + .375;}
Version 1Version 1
float tryMe (int x, float y){
return x*y;}
Version 2Version 2
result = tryMe (25, 4.32)
InvocationInvocation
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Overloading method
float tryMe (int x){
return x + .375;}
Version 1Version 1
int tryMe (int k){
return k*k;}
Version 2Version 2
Not Overloading methodNot Overloading method
OOP JAVA 19Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Phương thức println là overloaded:
println (String s)
println (int i)
println (double d)
etc.
Ví dụ:
System.out.println ("The total is:");
System.out.println (total);
Overloading method
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nội Dung
• Tạo Class
• Tạo object
• Nạp chồng (Overloading method)
• Bao Đóng (Encapsulation)
6
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Encapsulation là kỷ thuật che dấu các fields trong class làprivate và cung cấp các phương thức truy xuất fields bằngcác phương thức public
Encapsulation còn gọi là che dấu dữ liệu
Encapsulation là một trong 4 khái niệm của OOP. ( inheritance, polymorphism, và abstraction)
Encapsulation
OOP JAVA 22Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Encapsulation
Client (user) Methods
Data
OOP JAVA 23Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Encapsulation
Trong Java chúng ta thực hiện encapsulation nhờ sử dụng thíchhợp các visibility modifiers
Có 3 visibility modifiers: public, private, và protected
Các thành viên của class với khai báo public, có thể được truy xuất toàn cục.
Các thành viên của class với không khai báo, có thể được truy xuất bởi bất kì class nào trong cùng một gói (package).
Các thành viên của class với khai báo protected, chỉ có thể được truy xuất bởi trong class hoặc các class con.
Các thành viên của class với khai báo private, chỉ có thể được truy xuất trong class.
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Dữ liệu được định nghĩa với private
Chỉ có thể được truy xuất bởi các phương thức của class Phương thức có thể được định nghĩa với public hay private
public method: cung cấp các dịch vụ cho client service methods
private method: không thể truy xuất từ bên ngoài class. Mụcđích là hỗ trợ các phương thức khác của class support methods.
Từ khóa final sử dụng tạo biến hằng
private final int INCREMENT = 5;
Encapsulation
7
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụclass HinhChuNhat{
private double cdai, crong;public HinhChuNhat(){
this(0,0);}public HinhChuNhat (double cd, double cr){
cdai = cd;crong = cr;
}public double getDai(){
return cdai;}public void setDai(double d){
cdai = d;}
public double getRong(){
return crong;}public void setRong(double r){
crong = r;}public double DienTich(){
return cdai * crong;}public double ChuVi(){
return (cdai + crong)*2;}
}
OOP JAVA 26Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Encapsulation
Chúng ta có thể đặt hai cái nhìn về đối tượng:
internal - Cấu trúc của dữ liệu nội tại, Các giải thuật sử dụngbới các phương thức của đối tượng
external - Sự tương tác của đối tượng với các đối tượngkhác trong chương trình
Từ external, Đối tượng là một thực thể được bao đóng, cungcấp một tập các service
Những service này định nghĩa interface tới đối tượng
OOP JAVA 27Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Encapsulation
Một đối tượng nên được quản lí một cách an toàn
Bất kì một thay đổi nào tới trạng thái của nó, sẽ được truy xuấtthông qua interface
Người dùng hay client muốn truy xuất đối tượng cần phải thôngqua các service của nó ( interface)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tổng kết
Mỗi đối tượng đều có trạng thái và các hành vi. Các giá trị củamột biến đối tượng được xác định trong trạng thái của nó. Cácphương thức của đối tượng đáp ứng các hành vi của nó
Các biến thể hiện nên được khai báo với private nhằm đẩy mạnhencapsulation
Một phương thức phải trả về một trị trong lệnh return ( hoặcvoid nếu không)
Constructor không có lệnh return, ngay cả void
Có 4 mức truy xuất: public, protected, private, và default.
Che dấu các field trong class
8
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ
public class SalesPerson{
private String name;private int id;private double commissionRate;private double sales;public SalesPerson (String name, int id, double commissionRate){
setName(name);this.id = id;setCommissionRate(commissionRate);
}public void setName(String n){
name = n;}public String getName(){
return name;}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụpublic void setCommissionRate(double newRate){
if (newRate >= 0.0 && newRate <= 0.20){
commissionRate = newRate;}else{
System.out.println(“Rate must be between 0 and 20%”);}
}public double getCommissionRate(){
return commissionRate;}public int getId(){
return id;}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ
public void addToSales(double s){
sales += s;}public double computeCommission(){
double commission = 0.0;if (sales > 0.0){
commission = sales * commissionRate;}sales = 0.0; //Start overreturn commission;
}}
1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Mở rộng class
Chương 3 Nội dung
•• Object Object thamtham chichiếếuu vvàà đđịịnhnh danhdanh
•• TruyTruyềềnn thamtham ssốố. .
•• static modifier static modifier
•• Nested classNested class
•• Interfaces Interfaces vvàà polymorphismpolymorphism
OOP JAVA 3Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Đối tượng tham chiếu
Lưu ý: biến cơ sở chỉ chứa trị, nhưng biến đối tượng chứa địa chỉ của đối tượng
Một đối tượng tham chiếu có thể được chỉ như một con trỏ tới vị trí đối tượng
"Steve Jobs"name1
num1 38
int num1 = 38;String name1 = “Steve Jobs”;
OOP JAVA 4Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Phép gán
Tạo bản sao gía trị (địa chỉ) và lưu vào biến
Dạng cơ sở:
num1 38
num2 96Trước:
num2 = num1;
num1 38
num2 38Sau:
int num1 = 38, num2 = 96;
num2 = num1;
2
OOP JAVA 5Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Phép gán (tt)
Dạng đối tượng:
name2 = name1;
name1
name2Trước:
"Steve Jobs"
"Steve Wozniak"
name1
name2Sau:
"Steve Jobs"
string name1= “Steve Jobs”, name2= “Steve Wozniak”;
name2 = name1;
OOP JAVA 6Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Định danh
Hai hay nhiều tham khảo tới cùng một đối tượng được gọi là định danh
Tình huống sử dụng: Một đối tượng có thể được truy xuất bằng cách sử dụng nhiều biến tham khảo
Định danh thường dùng, nhưng cần quản lí cẩn thận
Thay đổi đối tượng qua một định danh là thay đổi tới tất cả định danh khác!
Ví dụ:
string name1= “Nam”, name2= “Bac”;
name2 = name1;
name1 = “Dong”; // name2 = ??
Nội dung
•• Object Object thamtham chichiếếuu vvàà đđịịnhnh danhdanh
•• TruyTruyềềnn thamtham ssốố. .
•• static modifier static modifier
•• Nested classNested class
•• Interfaces Interfaces vvàà polymorphismpolymorphism
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Truyền tham số tới Method
Truyền trị
Tạo bảng sao tham số truyền vào tham số hình thức
Bản chất tham số truyền là một phép gán
Truyền tham khảo
Tham số truyền và tham số hình thức cùng là định danh tới cùng một đối tượng.
Nếu chúng ta thay đổi trạng thái đối tượng qua tham sốhình thức trong phương thức, chúng ta đang thay đổi đối tượng truyền.
Lưu ý: sự khác biệt giữa thay đổi đối tượng tham khào và đối tượng mà tham khảo chỉ tới!!!
3
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ
class myClass{public static void main(String[] agrs){
int num = 10;System.out.println(“Before call setNum : ” + num);setNum(num);System.out.println(“After call setNum” + num);
}public static void setNum(int n){
n = 5;}
} n=10
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Example
class myClass{public static void main(String[] agrs){
Date d = new Date(2008, 9,13);System.out.println (“Before call setDay : ” + d);setDay(d);System.out.println (“After call setDay : ” d);
}public static void setDay(Date da){
da.setDate(20);}
} da
dsetDay(d):
(2008, 9, 13)
d
daAfter setDay(d):
(2008, 9, 20)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Example
class myClass{public static void main(String[] agrs){
Date d = new Date(2008, 10,13);System.out.println (“Before call setDay : ” + d);setDay(d);System.out.println (“After call setDay : ” d);
}public static void setDay(Date da){
da = new Date(2008, 9,20);}
} da
dsetDay(d):
(2008, 9, 13)
d
daAfter setDay(d):
(2008, 9, 13)
(2008, 9, 20)
Nội dung
•• Object Object thamtham chichiếếuu vvàà đđịịnhnh danhdanh
•• TruyTruyềềnn thamtham ssốố. .
•• static modifier static modifier
•• Nested classNested class
•• Interfaces Interfaces vvàà polymorphismpolymorphism
4
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Static modifier
Ví dụ: Class Math là static:
result = Math.sqrt(25)
Gọi phương thức static có thể viện dẫn qua tên class
Các biến có thể khai báo static
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Static modifier
Khai báo biến và phương thức static , sử dụng từ khóa static
Ví dụ:
static double sqrt(double num)
static int k;
Một phương thức hay biến static có thể được truy xuất màkhông cần bất kì một thể hiện nào của class.
Phương thức static còn được gọi là class methods vàbiến static gọi là class variables
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Static variables
Thông thường , một đối tượng có không gian dữ liệu của chính nó, nhưng nếu một biến là static, chỉ có một bản sao của biến tồn tại cho tất cả đối tượng thuộc class.
private static int counter;
Không gian bộ nhớ của biến static được tạo khi class được tham khảo đầu tiên.
Tất cả đối tượng được tạo từ class sẽ chia sẽ các biến static
Thay đổi giá trị của một biến static trong một đối tượng, sẽ thay đổi tới tất cả đối tượng.
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
StaticDemo.javaclass Employee{
private String name, address;private int SSN, number;private static int counter;public Employee(String name, String address, int SSN){
System.out.println(“Constructing an Employee”);this.name = name;this.address = address;this.SSN = SSN;this.number = ++counter;
} public int getCounter(){
return counter;}public int getNumber(){
return number;}
}
public class StaticDemo
{
public static void main(String [] args)
{
Employee e1 = new Employee("John", "Hollywood Blvd.", 123456789);
Employee e2 = new Employee("Wayn", "WallStreet Blvd.", 987654321);
System.out.println("Using e1, counter= " + e1.getCounter());
System.out.println("Using e2, counter= " + e2.getCounter());
System.out.println("Using e1, number= " + e1.getNumber());
System.out.println("Using e2, number= " + e2.getNumber());
}
}
Employee
0counter 12
e1
name=“John”
address=“Hollywood Blvd.”
SSN=123456789
number=1
e2
name=“Wayn”
address=“WallStreet Blvd.”
SSN=987654321
number=2
5
OOP JAVA 17Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Static methods
Phương thức main là static, nó được viện dẫn bởi hệ thống mà không cần tạo đối tượng.
Static methods không thể tham khảo các biến thể hiện, bởi vì các biến này không tồn tại cho đến khi đối tượng tồn tại.
Do đó chúng có thể tham khảo static hoặc biến cục bộ
Ví dụ:
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Static methods
class Helper{
public static int triple (int num){
return num * 3;}
}
Phương thức có thể được viện dẫn:
value = Helper.triple (5);
Nội dung
•• Object Object thamtham chichiếếuu vvàà đđịịnhnh danhdanh
•• TruyTruyềềnn thamtham ssốố. .
•• static modifier static modifier
•• Nested classNested class
•• Interfaces Interfaces vvàà polymorphismpolymorphism
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nested Classes
Một class được khai báo trong một class khác được gọi là nestedclass
Do đó: Một class không những chứa dữ liệu và phương thức màcòn chứa các class khác
Class
Class
Outer Class
Nested Class
6
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Example
class Outside
{public static class Inside_1
{
}
public class Inside_2
{
}
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nested Classes
Khi biên dịch sẽ tạo ra các tập tin bytecode tương ứng, Ví dụ:
Outside.class
Outside$Inside_1.class
Outside$Inside_2.class
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Example
class Outside
{
public class Inside
{
}
}
public class MainClass {
public static void main(String[] arg)
{
Outside outer = new Outside();
Outside.Inside inner = new Outside.Inside();
}
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nested Classes
Nested classes được chia vào 2 nhóm:
Static nested class
Không thể tham khảo biến và phương thức class bên ngoài
Nonstatic nested class (cò gọi là inner class)
Các phương thức của class Inner có thể truy xuất biến và phương thức class bên ngoài ngay cả khi khai báo làprivate
Một thể hiện của inner class chỉ có thể tồn tại trong một thểhiện của class bên ngoài
7
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Example class Outer {
int outer_x = 100;void test() {
Inner inner = new Inner();inner.display_x();
}class Inner { // có thê truy xuất trực tiếp đến biến của lớp Outer
int inner_y = 10;void display_x() {
System.out.println(“display : outer_x = “ + outer_x);}
}void display_y() { // không thể truy xuất biến của lớp Inner
System.out.println(“display : inner_y = “ + inner_y); // Error}
}class InnerClassDemo {
public static void main(String args[]) {Outer outer = new Outer();outer.test();
}}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Example
class Outside{
public static class Skinside{
}public class Inside{
}}public class MainClass{
public static void main(String[] arg){
Outside.Skinside ex = new Outside.Skinside();}
}
Nội dung
•• Object Object thamtham chichiếếuu vvàà đđịịnhnh danhdanh
•• TruyTruyềềnn thamtham ssốố. .
•• static modifier static modifier
•• Nested classNested class
•• Interfaces Interfaces vvàà polymorphismpolymorphism
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Abstract class
Abstract method:
Phương thức không có hiện thực
Khai báo sử dụng từ khóa abstract
Không có { }
Ví dụ: public abstract void someMethod();
Abstract class:
Là một class chứa một hay nhiều phương thức abstract
Không có thể hiện:
MyAbstractClass a1 = new MyAbstractClass();error
Một class khác sử dụng class abstract bẳng cách thừa kế vàhiện thực các phương thức abstract
Khai báo: public abstract class tenclass{ }
8
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ class abstract
public abstract class LivingThing {
public void breath(){
System.out.println("Living Thing breathing..."); }
public void eat(){
System.out.println("Living Thing eating..."); }
public abstract void walk(); }
public class Human extends LivingThing {
public void walk() {
System.out.println("Human walks..."); }
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Interface
Một interface là một tập các hằng số và các phương thức abstract
Một phương thức abstract là một phương thức chỉ khai báo mẫu mà không hiện thực.
Có thể khai báo dùng từ khóa abstract, hoặc không Một interface không thể có thể hiện
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Khai báo Interface
access interface InterfaceName
{
type MethodName1 (parameter-List);
...
type MethodNamen (parameter-List);
type Final-Var1 = value;
…
type Final-Varn = value;
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ
class Employee {
private String name, address;private int SSN, number;private static int counter;public Employee(String name, String address, int SSN){
System.out.println(“Constructing an Employee”);this.name = name;this.address = address;this.SSN = SSN;this.number = ++counter;
} public static int getCounter(){
return counter;}public int getNumber(){
return number;}
}
public interface IEmployee
{
public static int getCounter();
public int getNumber();
}
9
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Hiện thực Interface
Một class có thể hiện thực nhiều interface Mỗi interface ngăn cách bởi dấu phẩy
Một class phải hiện thực tất cả phương thức trong tất cảinterface khai báo
Một class hiện thực interface, có thể định nghĩa thêm phương thức
Khai báo class hiện thực interface dùng từ khóa implements :
Interfaces_demo
class ClassName implements interface1, interface2{
// all methods of both interfaces}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Example class Employee implements IEmployee{
private String name, address;private int SSN, number;private static int counter;public Employee(String name, String address, int SSN){
System.out.println(“Constructing an Employee”);this.name = name;this.address = address;this.SSN = SSN;this.number = ++counter;
} public static int getCounter(){
return counter;}public int getNumber(){
return number;}
}
public interface IEmployee
{
public static int getCounter();
public int getNumber();
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Example
public interface Doable{
public void doThis();public int doThat();public void doThis2 (float value, char ch);public boolean doTheOther (int num);
}
Các phương thức không có thân
Dấu phẩy
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ
public class CanDo implements Doable{
public void doThis (){
// whatever}
public void doThat (){
// whatever}
public void doThis2 (float value, char ch){
// whatever}
public boolean doTheOther (int num){
// whatever}
}
10
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Comparable Interface
Interface Comparable chứa một phương thức compareTo, dùng so sánh 2 đối tượng
Một class hiện thực Comparable cung cấp cách thức so sánh 2 đối tượng
if (obj1.compareTo(obj2) < 0)
System.out.println ("obj1 is less than obj2");
Giá trị trả về từ compareTo
<0 obj1< obj2
0 : bằng
>0 obj1>obj2
Khi chương trình thiết kế một class hiện thực interfaceComparable, cho phép định nghĩa thứ tự đối tượng trong danh sách.
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ Sortclass sort1 implements Comparator{
public int compare(Object o1,Object o2){
Name a=(Name)o1;Name b=(Name)o2;int lastCmp =
01.lastName.compareTo(02.lastName);return (lastCmp != 0 ? lastCmp :
o1.firstName.compareTo(o2.firstName));}
}Gọi phương thức sort: Collections.sort(list,sort1)
Class Name implements Comparable<Name>String firstName;String lastName;
{public int compareTo(Object o){
Name b=(Name)o;int lastCmp =
lastName.compareTo(b.lastName);return (lastCmp != 0 ? lastCmp :
firstName.compareTo(b.firstName));}
}Gọi phương thức sort: Collections.sort(list)
Collections.sort(v,new Comparator<Sinhvien>(){
public int compare(Sinhvien o1,Sinhvien o2){
int i=o1.getHoten().compareTo(o2.getHoten());
return i!=0?i:o1.getMssv().compareTo(o2.getMssv()); }});
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Polymorphism và Interfaces
Một interface có thể được dùng như một dạng đối tượng biến tham khảo Ví dụ: Doable obj;
Một biến interface có thể tham khảo tới bất kì đối tượng của class đã hiện thực interface
Ví dụ: Đối tượng obj có thể được dùng để chỉ tới bất kì đối tượng của bất kì class đã hiện thực interface Doable.
Phương thức doThis được viện dẫn dựa vào dạng đối tượng mà obj tham khảo tới :
obj.doThis();
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ
public interface Speaker
{
public void speak();
public void announce (String str);
}
public class Philosopher implements Speaker{
public void speak(){
// do something}public void announce (String str){
// do something}…
}public class Dog implements Speaker{
public void speak(){
// do something}public void announce (String str){
// do something}…
}
public class MainClass
{
public static void main(String[] agrs)
{
Speaker guest;
guest = new Philosopher();
guest.speak();
guest = new Dog();
guest.speak();
}
}
Phương thức speak sẽ thực thi khác nhau tại thời điểm khác nhau.
1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Thừa kế(Inheritance)
Chương 3
2
NỘI DUNG
• Tạo subclasses
• Class hierarchies
• Protected modifier
• Overriding methods
• Polymorphism và inheritance
3Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Thừa kế là một quá trình tạo class mới được dẫn xuất từ một class cósẵn.
Thừa kế cho phép một class mới được xây dựng bằng cách “mở rộng” một class có sẵn
Class có sẵn gọi là class cha, hay super class, hay class cơ sở
Class dẫn xuất gọi là class con, hay subclass, hay class dẫn xuất
A
B
B inherits A
Inheritance
4Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Inheritance
Class con thừa kế các đặc trưng của Class cha Class con được thừa kế variables và methods được định
nghĩa bởi Class cha Quan hệ thừa kế là quan hệ is-a.
Ví dụ:
Car is-a Vehicle
Dictionary is-a Book
Book
Dictionary
Vehicle
Car
2
5Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tạo subclasses
Trong ngôn ngữ Java , chúng ta sử dụng từ khóa extends khai báo quan hệ thừa kế.
class Car extends Vehicle
{
// class contents
}
class Dictionary extends Book
{
// class contents
}
6Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Một class con có thể là cha của một class khác
Nhiều class có thể được dẫn xuất từ một class.
Do đó, quan hệ thừa kế thường được xây dựng vào sơ đồphân cấp.
Hai con cùng một cha được gọi là siblings.
Một class con thừa kế từ tất cả class ancestor của nó.
Class hierarchies
7Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Animal
Snake Lizard
Bird
Parrot
Reptile
Class hierarchies
8Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Cases study
Cylinder inherits Circle
Circle
Cylinder
3
9Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Cases study
Circle
- radius: double
+ Circle ()
+ Circle (r : double)
+ getRadius() : double
+ setRadius(r : double) : void
+ findArea() : double
Cylinder
- length: double
+ Cylinder()
+ Cylinder (r : double, l : double)
+ getLength() : double
+ setLength (l : double) : void
+ findVolume() : double
TestCylinder
+ main (args : String[]) : void
Sơ đSơ đồồ Class choClass cho TestCylinderTestCylinder
10Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Class Object
Class Object được định nghĩa trong gói java.lang của thư viện chuẩn của java.
Tất cả các class đều được thừa kế từ class Object
Nếu một class không được định nghĩa rõ là con của một class, nó được xem như là con của class Object.
Do đó, class Object được xem như class root của tất cả các class trong sơ đồ phân cấp
11Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Class Object chứa một vài method, được thừa kế bởi các class.
Ví dụ:
Method toString(): trả về chuỗi chứa tên đối tượng và một vài thông tin khác.
Method equals: trả về true nếu 2 tham khảo cùng định danh.
Chúng ta có thể định nghĩa lại các phương thức này cho phù hợp với thiết kế riêng.
Ví dụ:
Class String định nghĩa lại method equals so sánh 2 chuỗi
Class Object
12Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Phương thức clone()
Khi cần sao chép đối tượng, nếu ta dùng câu lệnh gán: newObject=someObject; thì ta không tạo được bản sao, mà chỉgán nguồn tham chiếu của someObject cho newObject.
Để tạo đối tượng mới với không gian bộ nhớ tách biệt, ta dùngphương thức clone(): newObject=someObject.clone();
Câu lệnh trên sao chép someObject sang địa điểm mới trong vịtrí nhớ mới và gán tham chiếu của đối tượng mới chonewObject
4
13Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Abstract classes
Một class abstract mô tả một khái niệm tổng quát trong một class phân tầng
Một class abstract không thể có thể hiện.
Chúng ta sử dụng từ khóa abstract trong khai báo một class là abstract:
public abstract class Animal
{
// contents
}
14Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Abstract classes
Một class abstract thường chứa các method abstract với không code.
Không giống interface, bắt buộc phải có từ khóa abstract khi khai báo một method abstract.
Class abstract có thể chứa một phương thức không abstract( khai báo code)
Nếu một class abstract không có khai báo method abstract?
15Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Abstract classes
Class con của class abstract phải nạp chồng các method abstract của class cha( class abstract)
Một method abstract không được định nghĩa final hoặc static?
Sử dụng khéo léo class abstract cho phép chúng ta định nghĩa các class tổng quát hóa trong sơ đồ phân cấp
16Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Interface
Thừa kế có thể được áp dụng tới interface. Một interface cóthể được dẫn xuất từ interface khác.
Interface con thừa kế tất cả method abstract của cha
Một class hiện thực interface con phải định nghĩa các phương thức từ cả hai ancestor và interface con.
5
17Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Class hierarchies
Employee
Salary Hourly
18Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Case study
Employee
Salary Hourly
- name: String
- address: String
- SSN: int
- number: int
+ mailCheck(): void
- Salary: float
+computePay(): float
- hourlyRate: float
- hoursWorked: float
+ computePay(): float
19Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Case study
public class Employee
{
private String name;
private String address;
private int SSN;
private int number;
public void mailCheck()
{
System.out.println(“Mailing a check to “ + name + “ “ + address);
}
}
20Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Case study
public class Salary extends Employee
{
private float salary; // Annual salary
public float computePay()
{
System.out.println(“Computing salary pay for “ + name);
return salary/52;
}
}
6
21Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Case studypublic class Hourly extends Employee{
private float hourlyRate; // Pay rateprivate float hoursWorked; // Weekly hours workedpublic float computePay(){
System.out.println(“Computing hourly pay for “ + name);float pay = 0.0F;if (hoursWorked <= 40){
pay = hourlyRate * hoursWorked;}else //Need to compute overtime{
pay = (hourlyRate * 40) +(hourlyRate * (hoursWorked - 40) * 1.5F);
}return pay;
}}
22Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Case study
public class InheritDemo{
public static void main(String [] args){System.out.println(“Instantiating an Employee”);Employee e = new Employee();e.name = “Robert Smith”;e.address = “111 Java Street”;e.SSN = 999001111;e.number = 1;System.out.println(“Instantiating a Salary”);Salary s = new Salary();s.name = “Jane Smith”;s.address = “222 Oak Drive”;s.SSN = 111009999;s.number = 2;s.salary = 100000.00F;System.out.println(“Instantiating an Hourly”);
Hourly h = new Hourly();h.name = “George Washington”;h.address = “333 Espresso Lane”;h.SSN = 111990000;h.number = 3;h.hourlyRate = 10.00F;h.hoursWorked = 50;System.out.println(“Paying employees”);//e.computePay(); //Does not compile!System.out.println(s.number + “ “ + s.computePay());System.out.println(h.number + “ “ + h.computePay());System.out.println(“Mailing checks”);e.mailCheck();s.mailCheck();h.mailCheck();}
}
23Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Case study
Kết quả
24Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Các phương thức khởi dựng không được thừa kế, ngay cả khi chúng khai báo public.
Tuy nhiên chúng ta thường muốn khởi dựng class cha khi khai báp class con
Từ khóa super được dùng tham khảo tới class cha, thường dùng để viện dẫn phương thức khởi dựng của class cha.
Đôi khi được dùng tham khảo biến và phương thức trong class cha
Trong phương thức khởi dựng của class con, super sử dụng ở dòng đầu tiên
super (parameters);
Từ khóa super
super.VariableName
super.MethodName (parameters);
7
25Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Method Overriding: là phương thức tạo trong class con giống phương thức định nghĩa trong class cha
Phương thức bị nạp chồng của class cha có thể được sử dụng bằng cách dùng từ khóa super
Nếu phương thức được khai báo với final, nó không được nạp chồng.
Khái niêm nạp chồng có thể được áp dụng cho dữ liệu, dữ liệu nạp chồng được gọi là shadowing variables
Shadowing variables: không nên sử dụng , có thể gây ra sự khóhiểu hay nhập nhằng trong code.
Method Overriding
26Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Overriding
27Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Overriding
28Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Overloading và Overriding
Overriding
Cùng tên phương thức
Cùng signature
Một ở trongancestor, một trongdescendant
Overloading
Cùng tên phương thức
Khác signature
Cả 2 có thể cùng class
8
29Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Binding
Binding: Xác định các địa chỉ bộ nhớ cho các vị trí nhảy
Static: thực hiện tại thời điểm biên dịch
Còn được gọi là offline
Dynamic: Được làm tại thời điểm chạy
Sự biên dịch được làm offline
Tach rời các tác vụ trước khi chạy chương trình
Binding được làm tại thời điểm biên dịch gọi là static
Binding được làm tại thời điểm chạy là dynamic
Còn được gọi là late binding
VD Overridden
30Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Polymorphism
Sử dụng quá trình dynamic binding cho phép các đối tượng khác nhau sử dụng các phương thức có các hành động khác nhau cho các phương thức cùng tên
Overloading đầu tiên được xem là polymorphism
Ngày nay thường dùng tham khảo của dynamic binding
31Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
References và Inheritance
Một sự tham khảo đối tượng có thể tham khảo tới đối tượng của class hay tới một đối tượng của bất kì class nào quan hệ tới nó qua thừa kế
Holiday day;day = new Christmas();
Holiday
Christmas
32Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
References and Inheritance
Có thể gán một đối tượng của class dẫn xuất tới bất kìmột dạng ancestor
Person josephine;
Employee boss = new Employee();
josephine = boss; Không thể gán một đối tượng của class ancestor tới
một biến dạng class dẫn xuấtPerson josephine = new Person();
Employee boss;
boss = josephine;
Person
Employee
9
33Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Polymorphism và Inheritance
Giả sử class Holiday có một phương thức celebrate, vàclass Christmas nạp chồng nó.
Ta định nghĩa một viện dẫn sau:
day.celebrate();
Nếu day tham khảo tới một đối tượng Holiday, nó viện dẫn phương thức celebrate của Holiday; Nếu day tham khảo tới đối tượng Christmas, nó viện dẫn celebrate của Christmas
34Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Cases study
public class Main{
public static void main(String[] agrs)
{
Holyday day;
day = new Holyday();day.celebrate();
day = new Christmas();
day.celebrate();
}
}
Holiday
+ Celebrate() : void
Christmas
+ Celebrate() : void
35Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Khai báo Final
Từ khóa final dùng tạo các biến hằng số. Một biến final không thể thay đổi trị.
Final class: Không được thừa kế. Final method: Không được nạp chồng.
VD:public final class Hourly extends Employee{
// Class definition...}public class PartTime extends Hourly //error!{
// Class definition...}
36Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tổng kết
Inheritance là một khái niệm quan trọng trong lập trình hướng đối tượng. Nó cho phép xây dựng một class mới bằng cách mở rộng một class sẵn có. Class mới thừa kế tất cảthuộc tính và phương thức của class được mở rộng.
Từ khóa extends được dùng để hiện thực thừa kế
Trong java không cho phép thửa kế đa bội.
Class Object là class root trong sơ đồ phân tầng.
Pương thức nạp chồng là khi class con có cùng một phương thức với class cha.
Từ khóa super được dùng trong class con khi cần truy xuất thuộc tính hay phương thức của class cha
Class con viện dẫn phương thức khởi dựng của class cha bằng cách sử dụng super() hoặc super(tham số) ở dòng đầu tiên trong phương thức khởi dựng ở class con.
Class final không thể mở rộng, phương thức final không thể nạp chồng.
10
37Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tổng kết
Các phương thức trong Java là phương thức ảo, có nghĩa là một phương thức nạp chồng được viện dẫn tại thời điểm chạy
Class abstract là mộ class không có thể hiện. Từ khóa abstract được dùng khai báo một class abstract
Từ khóa abstract cũng được dùng để khai báo một phương thức abstract
Một phương tức abstract không có thân (code).
Phương thức abstract phải được nạp chồng trong bất kìmột class con nào, hay class con cũng là class abstract.
1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Chương 4
CẤU TRÚC TUYỂN TẬP
COLLECTION
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Collection
set List
SortedSet
Queue
Map
SortedMap
Hash Set
ArrayList Vector LinkedList
TreeMap
HashMap
HashTable
TreeSet
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Collection
Là một Object cho phép nhóm nhiều thành phần vào một đơn vị
Sử dụng lưu trữ, truy vấn, xử lí. ..
Miêu tả các mục dữ liệu một cách tự nhiên
Các version cũ hỗ trợ các Collection: vector, HashTable, Array
Các version sau hỗ trợ Collection framework
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Collecton interface
public interface Collection<E> {//Basic operations int size();boolean isEmpty();boolean contains(Object element);boolean add(E element);//optional boolean remove(Object element); //optional Iterator iterator();
//Bulk operationsboolean containsAll(Collection<?> c);boolean addAll(Collection<? extends E> c); //optional boolean removeAll(Collection<?> c);//optional boolean retainAll(Collection<?> c); //optional void clear(); //optional
//Array operationsObject[] toArray(); <T> T[] toArray(T[] a);
}
2
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Colection
Các phép tóan cơ sở
int size(): xác định kích thước của tuyển tập
Boolean isEmpty()
Boolean contains(Object obj): kiểm tra obj có trong tuyển tậpkhông
Boolean add(E element)
Boolean remove(Object obj)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Di chuyển trong Collection
Có 2 cách
for each
for (Object o : collection) System.out.println(o);
VD:
public class ForEachDemo {
public static void main(String[] args) {
int[] arrayOfInts = { 32, 87, 3, 589, 12,1076, 2000, 8, 622, 127 };
for (int element : arrayOfInts) {
System.out.print(element + " "); }
System.out.println(); }
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Di chuyển trong Collection(tt)
Interator:
public interface Iterator<E> {
boolean hasNext();
E next();
void remove(); //optional}
VD:
static void filter(Collection c) {
for (Iterator i = c.iterator(); i.hasNext(); ) if (!cond(i.next())) i.remove();
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Một số phép tóan khác boolen containAll(Collection<?> c): Tuyển tập hiện thời có chứa
tuyển tập c không boolean addAll(Collection<?> c): Hợp hai tuyển tập boolean removeAll(Collection<?> c): phép trừ bolean retainAll(Collection<?> c): phép giao void clear() Object[] a = c.toArray(); chuyển các phần tử trong collection c vào
array a
3
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Vector
Vector là danh sách chỉ chứa phần tử có type Object
Khai báo
public Vector()
public Vector(int initialCapacity)
public Vector(int initialCapacity, int capacityIncrement)
public Vector(Collection c)
Vector v = new Vector(Arrays.asList(array));
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Thêm phần tử vào Vector
Thêm vào cuối :
Public add(object)
Vector v = new Vector();
v.add(“aaaaa”);
Thêm vào tại vị trí index:
public void add(int index, Object element)
public void insertElementAt(Object element, int index)
Thêm từ một tập khác:
public boolean addAll(Collection c)
public boolean addAll(int index, Collection c)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Loại bỏ phần tử từ vector
Loại bỏ một phần tử
public Object remove(int index)
public void removeElementAt(int index)
public boolean remove(Object element)
public boolean removeElement(Object element)
Loại bỏ một tập
public boolean removeAll(Collection c)
public boolean retainAll(Collection c)
protected void removeRange(int fromIndex, int toIndex)
Thay Thế:
public Object set(int index, Object element)
public void setElementAt(Object obj, int index)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Các phuong thức và tác vụ khác
public int size()
public void setSize(int newSize)
public boolean isEmpty()
public Object get(int index)
public Object elementAt(int index)
public Object firstElement()
public Object lastElement()
4
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tìm kiếm phần tử
public boolean contains(Object element)
public int indexOf(Object element)
public int indexOf(Object element, int index)
public int lastIndexOf(Object element)
public int lastIndexOf(Object element, int index)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ
import java.util.Vector; public class FindVector { static String members[ ] = {"Ralph", "Waldo", "Emerson"}; public static void main (String args[]) { Vector v = new Vector(); for (int i=0, n=members.length; i<n; i++) { v.add(members[i]); } System.out.println(v); System.out.println("Contains Society?: " + v.contains("Society")); System.out.println("Contains Waldo?: " + v.contains("Waldo"));System.out.println("Where's Waldo?: " + v.indexOf("Waldo")); System.out.println("Where's Thoreau?: " + v.indexOf("Thoreau")); System.out.println("Where's Emerson from end?: " + v.lastIndexOf("Emerson")); } }
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
SETpublic interface Set<E> extends Collection<E> { //Basic operations
int size();boolean isEmpty();boolean contains(Object element);boolean add(E element);//optionalboolean remove(Object element); //optionalIterator iterator();
//Bulk operationsboolean containsAll(Collection<?> c);boolean addAll(Collection<? extends E> c);//optionalboolean removeAll(Collection<?> c); //optionalboolean retainAll(Collection<?> c); //optionalvoid clear(); //optional
// Array Operations Object[] toArray(); <T> T[] toArray(T[] a);}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Set (tt)
Giới hạn Collection để không cho phép các phần tử lặp lại
VD a,b là hai đối tượng Set
a.containAll(b):
a.addAll(b)
a.removeAll(b)
a.retainAll(b)
a.clear()
5
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
HashSet
Là một dạng cài đặt của Set
HashSet()
HashSet(Collection c)
HashSet(int initCapacity)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
import java.util.*;public class FindDups {public static void main(String args[]) {Set<String> s = new HashSet<String>();
for (String a : args) if (!s.add(a)) System.out.println("Duplicate: " + a); System.out.println(s.size()+" distinct
words: "+s); }} Chay: java FindDups i came i saw i leftKết quả: Duplicate: iDuplicate: i4 distinct words: [i, left, saw, came]
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Set<Type> union = new HashSet<Type>(s1);union.addAll(s2);
Set<Type> intersection = new HashSet<Type>(s1);intersection.retainAll(s2);
Set<Type> difference = new HashSet<Type>(s1);difference.removeAll(s2);
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
import java.util.*;
public class FindDups2 {
public static void main(String args[]) {
Set<String> uniques = new HashSet<String>();
Set<String> dups = new HashSet<String>();
for (String a : args)
if (!uniques.add(a)) dups.add(a);
uniques.removeAll(dups);
System.out.println("Unique words: " + uniques); System.out.println("Duplicate words: " + dups); }}
6
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
LIST
public interface List<E> extends Collection<E> {//Positional access
E get(int index);E set(int index, E element);//optionalboolean add(E element);//optional void add(int index, E element); //optional E remove(int index); //optional abstract boolean addAll(int index, Collection<? extends E> c);
//optional //Search
int indexOf(Object o);int lastIndexOf(Object o); //Iteration ListIterator<E> listIterator();ListIterator<E> listIterator(int index);
//Range-view List<E> subList(int from, int to);}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
ArrayList
Khởi dựng:
ArrayList()
ArrayList(Collection<? extends E> c)
ArrayList(int initialCapacity)
Có 2 hiện thực: ArrayList và LinkedList
ArrayList:
LinkedList
VD:
List<Type> list3 = new ArrayList<Type>(list1);
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Boolean add(E o) Void add(int index, E element) Boolean addAll(Collection<? extends E> c) Boolean addAll(int index, Collection<? extends E> c) Void clear() Object clone() Boolean contains(Object elem) Void ensureCapacity(int minCapacity) E get(int index) Int indexOf(Object elem) Boolean isEmpty() Int lastIndexOf(Object elem) E remove(int index) Boolean remove(Object o) protected void removeRange(int fromIndex, int toIndex)
E set(int index, E element) int size() Object[] toArray() <T> T[] toArray(T[] a) void trimToSize()
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
public boolean equals(Object o)
public List<E> subList(int fromIndex, int toIndex)
import java.util.*;
public class Shuffle {
public static void main(String args[]) {
List<String> list = new ArrayList<String>();
for (String a : args)
list.add(a);
System.out.println(list); }}
7
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
LinkedList
Constructor LinkedList() Constructs an empty LinkedList(Collection<? extends E> c)
Boolean add(E o) Void add(int index, E element) Boolean addAll(Collection<? extends E> c)
boolean addAll(int index, Collection<? extends E> c) void addFirst(E o)
Void addLast(E o) Void clear() Object clone() Boolean contains(Object o) E element() E get(int index) E getFirst() E getLast()
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Int indexOf(Object o) Int lastIndexOf(Object o) ListIterator<E> listIterator(int index) Boolean offer(E o) E peek() E poll() E remove() E remove(int index) Boolean remove(Object o) E removeFirst() E removeLast() E set(int index, E element) Int size() Object[] toArray() <T> T[] toArray(T[] a)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
QUEUE
public interface Queue<E> extends Collection<E> {
E element();
Trả về head, nhưng không lọai bỏ
boolean offer(E o);Chèn vào Queue
E peek(); Trả về head, null nếu rỗng
E poll(); Trả về head (và lọai bỏ), null nếu rỗng
E remove(); Lọai bỏ head
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
add(e)offer(e)
remove()poll()
element()peek()
import java.util.*;public class Countdown {public static void main(String[] args) throws InterruptedException { int time = Integer.parseInt(args[0]); Queue<Integer> queue = new LinkedList<Integer>(); for (int i = time; i >= 0; i--) queue.add(i); while(!queue.isEmpty()) {
System.out.println(queue.remove()); Thread.sleep(1000); }}
8
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Algorithms
Sắp xếp danh sách Hiện thực Comparator
Hiện thực Comparable
public interface Comparator<T> {
int compare(T o1, T o2);}
public interface Comparable<T> {
public int compareTo(T o);}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ Sortclass sort1 implements Comparator{
public int compare(Object o1,Object o2){
Name a=(Name)o1;Name b=(Name)o2;int lastCmp =
01.lastName.compareTo(02.lastName);return (lastCmp != 0 ? lastCmp :
o1.firstName.compareTo(o2.firstName));}
}Gọi phương thức sort:
Collections.sort(list,sort1)
Class Name implements Comparable<Name>String firstName;String lastName;
{public int compareTo(Object o){
Name b=(Name)o;int lastCmp =
lastName.compareTo(b.lastName);return (lastCmp != 0 ? lastCmp :
firstName.compareTo(b.firstName));}
}Gọi phương thức sort: Collections.sort(list)
Collections.sort(v,new Comparator<Sinhvien>(){
public int compare(Sinhvien o1,Sinhvien o2){
int i=o1.getHoten().compareTo(o2.getHoten());
return i!=0?i:o1.getMssv().compareTo(o2.getMssv()); }});
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Searchimport java.util.*; public class SearchTest { public static void main(String args[]) { String simpsons[] = {"Bart", "Hugo", "Lisa", "Marge", "Homer", "Maggie", "Roy"};
// Convert to list List<String> list = new ArrayList<String>(Arrays.asList(simpsons));
// Ensure list sorted Collections.sort(list); System.out.println("Sorted list: [length: " + list.size() + "]"); System.out.println(list);
// Search for element in list int index = Collections.binarySearch(list, "Maggie"); System.out.println("Found Maggie @ " + index);
// Search for element not in list index = Collections.binarySearch(list, "Jimbo Jones"); System.out.println("Didn't find Jimbo Jones @ " + index);
} }
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Case Study
Viết chương trình xử lí đối tương sinh viên:
Thêm
Sửa
Xóa
Sắp xếp
Tìm kiếm
Đối tượng sinh viên bao gồm các thuộc tính:
Mssv
Ho lot
Ten
DiemMở rộng: Cho phép lưu trữ thông tin vào đĩa.
6/1/2010 1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Streams và File I/O
Chương 5
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nội Dung
Tổng quan
Text File I/O
Binary File I/O
File Objects và File Names
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
So sánh file Binary và Text Text files: Các bits được biễu diễn thành các kí tự có thể in
Một byte/kí tự cho mã ASCII VD: Java source files là text files Bất kì một file nào được tạo bởi "text editor"
Binary files: Các bits dược biễu diễn thành một dạng thông tin được mã hóa khác, ví dụ như các lệnh thực thi hoặc dữ liệu numeric Các file này thì dễ dàng đọc bởi hệ thống Chúng không thể in được (theo nghĩa đọc)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Text File I/O
Các class quan trọng cho text file output PrintWriter FileOutputStream
Các class quan trọng cho text file input : BufferedReader FileReader
Lưu ý: FileOutputStream và FileReader chỉ được dùng khi khởi
dựng chúng ,tên file làm đối số FileOutputStream outFIle=new
FileOutputStream(“info.txt”) PrintWriter và BufferedReader không truyền tên file như
đối số khi khởi dựng PrintWriter printWriter=new PrintWriter(outFile,true);
import java.io.*;
6/1/2010 2
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Text File Output
Tạo một stream của class PrintWriter và gắn tới một text file
PrintWriter outputStream =new PrintWriter(new FileOutputStream("out.txt"));
Có thể sử dụng print và println để ghi file
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ Text file
public static void main(String[]args){
Scanner keys=new Scanner(System.in);
PrintWriter outputStream = null;
try{
outputStream =new PrintWriter(newFileOutputStream("out.txt"));
}catch(FileNotFoundExceptione){
System.out.println("Error opening the file out.txt.");
System.exit(0);
}
Mở the file
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ Text file(tt)
System.out.println(“Nhap 3 dong:");
String line = null;int count;
for (count = 1; count <= 3; count++)
{ line = keys.NextLine();
outputStream.println(count + " " + line);}
outputStream.close();
System.out.println("...ghi toi out.txt.");}
Đóng file
Ghi file
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Text File Input
Mở Text file input: Gắn một text file tới một stream
Sử dụng stream của class BufferedReader và gắn kết tới một text file
Sử dụng class FileReader gắn kết đối tượng BufferedReader tới Text file
VD:
BufferedReader inputS =
new BufferedReader(new FileReader("data.txt")); Thực hiện:
Đọc nhiều dòng (Strings) với readLine
BufferedReader không có phương thức đọc một số trực tiếp do đó các số được đọc như một chuỗi (sử dụng convert)
Đọc một kí tự với read
6/1/2010 3
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ
BufferedReader inputStream =
new BufferedReader(new FileReader("data.txt"));
String line = null;
line = inputStream.readLine();
System.out.println("The first line in data.txt is:");
System.out.println(line);
line = inputStream.readLine();
System.out.println("The second line in data.txt is:");
System.out.println(line);
inputStream.close();
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Đọc các từ trong một chuỗi: Sử dụng Class StringTokenizer
Các phương thức BufferedReader chỉ đọc một dòng hoặc một kí tự
StringTokenizer được dùng để chuyển một dòng vào các từ
import java.util.*
Có thể chỉ định kí tự phân cách (một hoặc nhiều kítự)
Mặc định là: “khỏang trắng" (space, tab, và newline)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
VD: StringTokenizer
Xuất các từ được ngăn cách bới : space, new line (\n), period (.) hoặccomma (,).
String inputLine = keys.NextLine();StringTokenizer wordFinder =new StringTokenizer(inputLine, " \n.,");while(wordFinder.hasMoreTokens()){
System.out.println(wordFinder.nextToken());}
Question2bor!tooBee
Nhap: "Question,2b.or !tooBee."
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
int count = 0;String line = inputStream.readLine();while (line != null){ count++; outputStream.println(count + " " + line); line = inputStream.readLine(); }
12
Sử dụng null kiểm tra EOF của Text FileSử dụngreadLineKiểm tra chonull
Sử dụngread kiểm tra cho -1 int c = inputStream.read();
6/1/2010 4
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
I/O Binary File
Class binary file output: DataOutputStream FileOutputStream
Class binary file input: DataInputStream FileInputStream
Lưu ý:
FileOutputStream và FileInputStream chỉ được dùng khi khởi dựng chúng, tên file làm đối số.
FileOutputStream outFIle=new FileOutputStream(“info.dat”) DataOutputStream và DataInputStream không truyền tên file như đối
số khi khởi dựng.
DataInputStream inputStream =new DataInputStream(inputf); import java.io.*;
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Sử dụng DataOutputStreamxuất dữ liệu tới Files:
Có thể lưu trữ bất kì một dạng dữ liệu cơ sở (int, char, double, vv.) và dạng String
Có thể đọc từ các chương trình Java nhưng không thể IN import java.io.*; Sử dụng ngọai lệ IOException
catch(IOException e){System.out.println("Problem with output...";
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
VD: Mở một Output File
Mở file numbers.dat:
DataOutputStream outputStream =new DataOutputStream(new FileOutputStream("numbers.dat"));
Hoặc:FileOutputStream middleman =new FileOutputStream("numbers.dat");
DataOutputStream outputStream =new DataOutputSteam(middleman);
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
DataOutputStream Methods
Một vài phương thức ghi DataOutputStream
void writeBoolean(boolean b)
void writeByte( int value)
void writeChar(int value)
void writeShort(int value)
void writeLong(long value)
void writeFloat(float value)
void writeInt(int value)
void writeDouble(double value)
void writeUTF(String value)
6/1/2010 5
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Input File
Gồm 2 bước
1. Tạo một đối tượng FileInputStream gắn kết một tên file» FileInputStream infile=new
FileInputStream("numbers.dat")2. Nối kết FileInputStream tới một đối tượng DataInputStream
» DataInputStream inStream =new DataInputStream(inFile) Kết hợp 2 bước:
DataInputStream inSm =new DataInputStream(new FileInputStream("numbers.dat"));
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
DataInputStream Methods
boolean readBoolean( )
byte readByte( )
char readChar( )
short readShort( )
long readLong( )
float readFloat( )
int readInt( )
double readDouble( )
String readUTF( )
String readLine( )
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
File Object
Hiện thực Serializable
Xét đối tượng Employee -String name;
-String address;
-int SSN;
-int number;
Employee
public class Employee implements Serializable
{
public String name;
public String address;
public int SSN;
public int number;
----------------------------
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
File Object import java.io.*; public class SerializeDemo { public static void main(String [] args) { Employee e = new Employee("Neil Young“, "Mobile, AL“, 11122333,101); try { FileOutputStream fileOut = new FileOutputStream("employee.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(e); out.close(); fileOut.close(); System.out.println("Saved completely"); }catch(IOException i) { i.printStackTrace(); } } }
6/1/2010 6
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
File Object import java.io.*; public class DeserializeDemo { public static void main(String [] args) { Employee e = null; try { FileInputStream fileIn = new FileInputStream("employee.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); e = (Employee) in.readObject(); in.close(); fileIn.close(); } catch(IOException i){ i.printStackTrace(); return; }catch(ClassNotFoundException c) { System.out.println("Employee class not found"); c.printStackTrace(); return; } System.out.println("Just deserialized Employee..."); System.out.println("Name: " + e.getName); System.out.println("Address: " + e.getAddress); System.out.println("SSN: " + e.getSSN); System.out.println("Number: " + e.getNumber); } }
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
File Properties
Lưu trũ thông tin cấu hình cho ứng dụng
Tên file: *.properties
Nội dung:
Key=value
Truy xuất:
ResourceBundle obj = ResourceBundle.getBundle(tenfile);
String bien=obj.getString(key);
6/1/2010 1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Java DataBase Connectivity
Chương 5
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nội Dung
Giới thiệu về JDBC
Kiểu dữ liệu trong JDBC
Một số đối tượng thường dùng trong JDBC
JDBC Driver URL
Sample Database
7 bước làm việc với JDBC
Ví dụ mẫu
Truyền tham số
Tạo file cấu hình database cho ứng dụng
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Giới thiệu về JDBC
JDBC cung cấp một tập các hàm thư viện cho phép truy cập vào CSDL quan hệ bao gồm các chức năng:
Kết nối vào CSDL.
Truy vấn dữ liệu.
Tương tác với dữ liệu.
Quản lý Transaction.
JDBC bao gồm 2 thành phần :
JDBC API: chứa trong gói java.sql.*
JDBC Driver Manager : liên kết với các driver cụ thể của nhà cung cấp.
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Kiểu dữ liệu trong JDBC
6/1/2010 2
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Một số đối tượng thường dùng trong JDBC
Tạo đối tượng Connection.DriverManager
Đối tượng thi hành câu lệnh SQL và trả kết quảvề cho ResultSet.
Hỗ trợ truyền tham số.
Câu lệnh được biên dịch trước khi thực thi tăng tốc độ khi truy xuất ở các lần tiếp theo.
PreparedStatement
Chứa tập dữ liệu trả về từ câu lệnh SQLResultSet
Đối tượng kết nối tới CSDL quan hệ, quản lý các transaction.
Connection
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
JDBC Driver URLs
MySQL (Connector / J)
Driver Class: com.mysql.jdbc.Driver
Default Port: 3306
JDBC URL: jdbc:mysql://host:port/database
Microsoft SQL Server (Microsoft Driver)
Driver Class: com.microsoft.jdbc.sqlserver.SQLServerDriver
Default Port: 1433
JDBC URL: jdbc:microsoft:sqlserver://host:port;databasename=name;
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Sample Database
Server: MySQL
Host: localhost:3306
Database: sample
User: java2
Password: 12345LOP
HOCVIEN
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
7 bước làm việc với JDBC
Bước 1: Nạp JDBC Driver
Class.forName(“com.mysql.jdbc.Driver”);
Bước 2: Định nghĩa chuỗi JDBC URL
String jdbcURL = “jdbc:mysql://localhost:3306/sample”;
Bước 3: Thiết lập kết nối
Connection con = DriverManager.getConnection(jdbcURL,”java2”,”12345”);
Bước 4: Tạo đối tượng PreparedStatement (truyền tham số nếu có)
String sql = “select * from lop”;
PreparedStatement pstmt = con.prepareStatement(sql);
Bước 5: Thực thi truy vấn.
ResultSet rs = pstmt.executeQuery();
- Nếu câu lệnh SQL là insert, update, delete thì dùng executeUpdate()
int rows = pstmt.executeUpdate();
User Password
Số dòng bị ảnh hưởng
6/1/2010 3
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
7 bước làm việc với JDBC (tt)
Bước 6: Xử lý kết quả trả về
while(rs.next())
{
System.out.println(“Lop ID:” + rs.getString(1) + “; Ten lop:” + rs.getString(2));
}
ResultSet cung cấp các phương thức để lấy dữ liệu dạng như sau:
XXX value = rs.getXXX(chỉ số cột) hoặc rs.getXXX(“tên cột”)
Ví dụ:
String lopID = rs.getString(1);
String tenLop = rs.getString(“TenLop”);
Bước 7: Đóng kết nối
con.close();
Cột đầu tiên được đánh số là 1Tên kiểu dữ liệu Giống tên field trong database. Phân biệt HOA thường
Trả về true nếu chưa duyệt hết các mẫu tin
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ mẫu
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");
String jdbcURL = "jdbc:mysql://localhost:3306/sample";
Connection con =
DriverManager.getConnection(jdbcURL,"java2","12345");
String sql = "select * from lop";
PreparedStatement pstmt = con.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Ví dụ mẫu (tt)
while(rs.next()) {
System.out.println("Lop ID: " + rs.getString(1) + "\tTen lop:" + rs.getString(2));
}
con.close();
} catch (ClassNotFoundException e) {
System.err.println("Khong tim thay driver!");
} catch (SQLException e) {
System.err.println("Loi truy van!");
}
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Truyền tham số
PreparedStatement cung cấp các phương thức để thiết lập tham số dạng như sau:
pstmt.setXXX(vị trí tham số, giá trị);
Ví dụ: Hãy liệt kê các học viên có mã lớp là “L01”;
…
Bước 4: Tạo đối tượng PreparedStatement
String sql = “select * from hocvien where LopID = ?”;
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,”L01”);
…
Vị trí đầu tiên được đánh số là 1
6/1/2010 4
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tạo file cấu hình database cho ứng dụng
Nội dung file db.propertiesdriver = com.mysql.jdbc.Driverurl = jdbc:mysql://localhost:3306/sampleuser = java2pwd = 12345
Chương trình có thể sửa lại như sau:public static void main(String[] args) {
try {ResourceBundle bundle = ResourceBundle.getBundle(“db”);String driver = bundle.getString(“driver”);String jdbcURL = bundle.getString(“url”);String user = bundle.getString(“user”);String pwd = bundle.getString(“pwd”);Class.forName(driver);Connection con = DriverManager.getConnection(jdbcURL,user,pwd);…
6/1/2010 1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
GUI (Graphics User Interface)
Chương 6
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nội Dung
JCheckbox, JRadioButton
JComboBox
JDateChooser
Menu
Mô hình Model - View
JList
JTable
Frame Lop
Frame Hocvien
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
JCheckBox, JRadioButton
JCheckBox: Cho phép chọn nhiều giá trị. Phương thức:
setSelected(boolean b) isSelected()
Sự kiện: actionPerform()
JRadioButton: Chỉ cho phép chọn 1 giá trị. Dùng ButtonGroup để nhóm các radio thành 1 nhóm.
ButtonGroup group = new ButtonGroup();group.add(radio1);group.add(radio2);…
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
JComboBox
Chứa danh sách các phần tử.
Cho phép chọn 1.
Phương thức:
addItem(String item)
removeItemAt(int index)
getItemCount()
getSelectedIndex()
getSelectedItem()
6/1/2010 2
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
JDateChooser
Là bean cho phép chọn ngày tháng.
Gói thư viện: jcalendar-1.3.3.jar
Class: com.toedter.calendar.JDateChooser
Phương thức getDate(): trả về ngày tháng đã chọn (kiểu java.util.Date).
Chuyển từ java.util.Date java.sql.Date
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Menu
JMenuBar
JMenuItem
JMenu
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Mô hình Model - View
View
Model
Notify view(s) model.getState()
Hiển thị dữ liệu
Chứa dữ liệu
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
JList
Chứa danh sách các phần tử Cho phép chọn nhiều giá trị. Ứng dụng mô hình View-Model
View: JList Model: DefaultListModel
Cách gắn kết Model vào ViewDefaultListModel model = new DefaultListModel();JList list = new JList();list.setModel(model);
Phương thức: DefaultListModel:
addElement(String e) removeElementAt(int index) getSize();
JList: getSelectedIndex() getSelectedValue() getSelectedIndices() getSelectedValues()
6/1/2010 3
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
JTable Hiển thị dữ liệu dưới dạng bảng (giống bảng tính Excel) Cho phép chọn nhiều giá trị. Ứng dụng mô hình View-Model
View: JTable Model: DefaultTableModel
Cách gắn kết Model vào ViewDefaultTableModel model = new DefaultTableModel();JTable table = new JTable();table.setModel(model);
Phương thức: DefaultTableModel:
addColumn(String name) addRow(Object[] row) addRow(Vector row) getRowCount(); setValueAt(Object value, int row, int col) getValueAt(int row, int col)
JTable: getSelectedRow() getSelectedRows() getSelectedRowCount()
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Lop Frame
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Hocvien Frame
1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Mô Hình N Layer
Chương 7
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Giới thiệu
Áp dụng trong phát triển ứng dụng
Dễ quản lý các thành phần của hệ thống
Không bị ảnh hưởng bởi các thay đổi
Tạo thuận lợi cho coding, dễ sửa lỗi
Reuses
Phân biệt kiến trúc đa tầng/nhiều lớp
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Mô hình
Presentation
Business logic
Data Access
Data Transfer Object (DTO)
DataBase
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Presentation Layer
Giao tiếp với người dùng cuối
Thu thập dữ liệu và hiển thị kết quả/dữ liệu
Lớp này sẽ sử dụng các dịch vụ do lớp Business Logic cung cấp.
Trong Java thì bạn có thể dùng Windows Forms, hay Mobile Forms, JSP để hiện thực lớp này.
2
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Presentation Layer(tt)
Gồm hai thành phần
UI:User Interface Components UIP:User Interface Process Components.
UI
Thu thập và hiển thị thông tin cho người dùng cuối TextBox, các Button, DataGrid
UIP
Quản lý các qui trình chuyển đổi giữa các UI Components Ví dụ :chịu trách nhiệm quản lý các màn hình nhập dữ liệu trong
một loạt các thao tác định trước Lớp này không nên sử dụng trực tiếp các dịch vụ của lớp Data Access mà
nên sử dụng thông qua các dịch vụ của lớp Business Logic vì khi sử dụng trực tiếp như vậy, chúng ta có thể bỏ qua các ràng buộc, các logic nghiệp vụmà ứng dụng cần phải có.
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Business Logic Layer
Lớp này thực hiện các nghiệp vụ chính của hệ thống
Sử dụng các dịch vụ do lớp Data Access cung cấp
Cung cấp các dịch vụ cho lớp Presentation.
Lớp này cũng có thể sử dụng các dịch vụ của các nhà cung cấp thứ 3 (3rd parties) để thực hiện công việc của mình
ví dụ như sử dụng dịch vụ của các cổng thanh tóan trực tuyến như VeriSign, Paypal…
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Business Logic Layer(tt)
Có các thành phần chính:
Business Components Business Entities Service Interface
Service Interface :Giao diện lập trình mà lớp này cung cấp cho lớp Presentation sử dụng.
Business Entities: Các thực thể mô tả những đối tượng thông tin mà hệthống xử lý. Các business entities này cũng được dùng để trao đổi thông tin giữa lớp Presentation và lớp Data Access.
Business Components: Các thành phần chính thực hiện các dịch vụ màService Interface cung cấp, chịu trách nhiệm
kiểm tra các ràng buộc logic(constraints), các qui tắc nghiệp vụ(business rules) sử dụng các dịch vụ bên ngoài khác để thực hiện các yêu cầu của
ứng dụng
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Data Access Layer
Lớp này thực hiện các nghiệp vụ liên quan đến lưu trữ và truy xuất dữ liệu của ứng dụng.
Sử dụng các dịch vụ của các hệ quản trị cơ sở dữ liệu như Mysql,SQL Server, Oracle,… để thực hiện nhiệm vụ của mình.
Trong lớp này có các thành phần chính
Data Access Logic
Data Sources
Servive Agents.
3
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Data Access Layer(tt)
Data Access Logic components (DALC)
Là thành phần chính chịu trách nhiệm lưu trữ vào và truy xuất dữliệu từ các nguồn dữ liệu - Data Sources như RDMBS, XML, File systems….
Trong Java các DALC này thường được hiện thực bằng cách sửdụng package java.sql để giao tiếp với các hệ cơ sở dữ liệu.
Service Agents là những thành phần trợ giúp việc truy xuất các dịch vụ bên ngòai một cách dễ dàng và đơn giản như truy xuất các dịch vụnội tại.
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
CASE STUDY
Xây Dựng Ứng Dụng DataBase
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Mục Tiêu
Ánh xạ Class Diagram vào DBMS
Phân tích ứng dụng theo mô hình 3 Layer
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Chuẩn Bị Công Cụ
JDK 1.6
DBMS: Mysql 5.0 trở lên
Username: root
Password: root
Eclipse 3.3 + Database tool + Visual Class
Library JDBC MYSQL:
Sao chép vào Folder:C:\Program Files\Java\jre1.6.0\lib\ext
4
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Cài đặt Database
Khởi động IE
Nhập: http://localhost/phpmyadmin
Nhập: username:root, password:root
Tạo Database:
Name: data
MySQL charset: UTF-8
Cài đặt Table
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Thiết kế ứng dụng
Khởi động Eclipse
Kiểm tra nối kết CSDL bằng công cụ Database development
Tạo mới Project
Xậy dựng Package DTO: chứa các class đối tượng đóng vai trò vận chuyển dữ liệu giữa các layer
Xây dựng Package DAO: chứa các class đối tượng truy xuất database (DBMS)
Xây dựng Package BUS: chứa các class đối tượng xử lí nghiệp vụ
Xây dựng Package Presentation: chứa các class GUI
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Kiểm tra kết nối database
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Chọn connection profile
5
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nhập tên Connecton Profile: dataMysql
Kích Next
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
6
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Xây dựng ứng dụng
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
DTO
Dựa vào sơ đồ khai báo Class
Nội dung mỗi class bao gồm
Fields
Class Variable
Các phương thức khởi dựng
Các phương thức get(), set()
VD:
class sinhvienDTO
class lopDTO
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
DAO: Package Database
Database.properties: Khai báo thông tin kết nối database
Class ConectionToolkit.java: Các phương thức kết nối database
Ứng với mỗi bảng trong database tạo một class DAO tương ứng.
VD: sinhvienDAO
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
DAO: Package Database (tt)
Database.properties: Khai báo thông số cấu hình DBMS
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/data
user=root
pass=root
7
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
DAO: Package Database (tt)
Tạo ConectionToolkit.java trong package Databasepublic class ConectionToolkit {
public static Connection getconection() {
ResourceBundle rb=ResourceBundle.getBundle("DataBase.database");
String driver=rb.getString("driver");
String url=rb.getString("url");
String username=rb.getString("user");
String password=rb.getString("pass");
Connection conn;
try {
Class.forName(driver);
conn=DriverManager.getConnection(url,username,password);
return conn;
}catch(Exception e){System.out.println("Loi Ket Noi");}
return null;}} OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
DAO: Package Database (tt)
Tạo các class giao tiếp với từng table
Cho phép layer Bus truy xuất CSDL
VD: class sinvienDAO
public class SinhvienDAO {
public SinhvienDAO() {}
//Các phương thức giao tiếp với Layer BUS
public static void createSV(sinhvienDTO s) { }
public static boolean isSinvien(String mssv) { }
public static void delete(String id) { }
public static List<sinhvienDTO> listsv() { }
// Tìm kiếm
public static List<sinhvienDTO> finebyName(String name) {}
public static void updateSV(sinhvienDTO o) { }
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
DAO: Package Database (tt)
Thêm một recordpublic static void createSV(sinhvienDTO s) throws SQLException{
Connection conn = ConectionToolkit.getconection();
String query = "INSERT INTO sinhvien" + "(mssv,holot,ten,diem)" + "VALUE (?,?,?,?)";
PreparedStatement ps = (PreparedStatement) conn.prepareStatement(query, Statement.KEEP_CURRENT_RESULT);
ps.setString(1, s.getMssv());
ps.setString(2, s.getHolot());
ps.setString(3, s.getTen());
ps.setDouble(4, s.getDiem());
ps.executeUpdate();
ps.close();
conn.close();}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
DAO: Package Database (tt)
Kiểm tra tồn tại
public static boolean isSinvien(String mssv) {
Connection conn = ConectionToolkit.getconection();
String query = "select * from sinhvien where mssv="+"'mssv'";
Statement stmt = conn.createStatement();
java.sql.ResultSet a=stmt.executeQuery(query);
if (a.first()){
return false;
} else { return true; }}
8
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
DAO: Package Database (tt)
Tìm kiếm
public static List<sinhvienDTO> finebyName(String name) {
List<sinhvienDTO> listsv=new ArrayList<sinhvienDTO>();
Connection conn=ConectionToolkit.getconection();
String query="select * from sinhvien where ten like "+ "'%"+name+"%'";
Statement stmt=conn.createStatement();
java.sql.ResultSet a=stmt.executeQuery(query);
while(a.next()) {
sinhvienDTO sv=new sinhvienDTO(a.getString("mssv"),a.getString("holot"),a.getString("ten"),
a.getDouble("diem"));
listsv.add(sv);}
return listsv;
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
DAO: Package Database (tt)
Xóa
public static void delete(String id) throws SQLException{
Connection conn = ConectionToolkit.getconection();
String query = "delete from sinhvien where mssv="+id;
Statement stmt = conn.createStatement();
stmt.execute(query);
}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
BUS: Package Business
Tạo các class giao tiếp với Layer Presentation Sử dụng giao tiếp DAO xử lí nghiệp vụ VD class sinhvienBUS
public class sinhvienBus {
public sinhvienBus() { }
public boolean CreateSV(sinhvienDTO o) {
//kiem tra ton tai
if (SinhvienDAO.isSinvien(o.getMssv())) {
SinhvienDAO.createSV(o);
return true;
} else {
System.out.println("co roi!");
return false; }}
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Presentation: Package Presentation
Giao tiếp với người dùng
Xử dụng giao tiếp BUSpublic static void main(String[] args) {
sinhvienDTO sv1=new sinhvienDTO("111111","Ho Phuong","Tring",10);
sinhvienBus svbus=new sinhvienBus();
try {
//svbus.CreateSV(sv1);
//svbus.DeleteSV(sv1.getMssv());
//svbus.updateSV(new sinhvienDTO("12346","Ho Dinh","Que",10));
List<sinhvienDTO> a=svbus.finebyName("K");
Iterator<sinhvienDTO> i=a.iterator();
while (i.hasNext()){
sinhvienDTO sv=i.next();
System.out.println(sv.getHolot()+" "+sv.getTen());
}} catch (SQLException e) {e.printStackTrace();}}
6/1/2010 1
Trường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Crystal Report
Chương 8
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Nội Dung
Tạo report trong java project
Thiết lập Data Source
Tạo truy vấn cho report
Thiết kế report
Gọi report trong java
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tạo report trong java project
Kích phải chuột vào project, chọn New Other...(hoặc nhấnCtrl + N)
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tạo report trong java project (tt)
Chỉ đường dẫn để lưu report. Nhập tên cho report là dssv. Nhấn Finish.
Để cho dễ quản lý, ta nên tạo thư mục reports trong project, lưu tất cả report trong thư mục này.
6/1/2010 2
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Thiết lập datasource
Trong cửa sổ Data Source Explorer, kích phải vào Database Connections, chọn New
Xuất hiện hộp thoại New Connection Profile, chọn MySQL trong danh sách database. Đặt tên Name: Sample Database. Nhấn Next.
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Thiết lập Data Source (tt)
Nhập các thông tin kết nối
database: sample
user: java2
password: 12345
Nhấn nút Test Connection để kiểm tra kết nối.
Sau đó nhấn nút Finish.
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tạo truy vấn cho Report
Kích phải chuột vào Data Source vừa tạo (Sample Database), chọn Open SQL Scrapbook
Trong cửa sổ SQL Scrapbook Editor, thiết lập các thông số sau:
Kích phải vào khoảng trắng bất kỳ trong Editor chọn Edit in SQL Query Builder (hoặc nhấn Alt + Q)
Tên Data Source Tên Database
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tạo truy vấn cho Report (tt)
Kích phải chuột vào vùng khoanh tròn, chọn Add Table…
Chọn table.
Nhấn OK.
6/1/2010 3
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tạo truy vấn cho Report (tt)
Check vào những field muốn hiển thị
Chọn tab Conditions, tạo điều kiện kết của 2 bảng (Hocvien.lopid = Lop.lopid)
Nhấn OK
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Tạo truy vấn cho Report (tt)
Sau khi nhấn OK xong, kích phải chuột vào khoảng trắng bất kỳ trong cửa sổ SQL Editor chọn Crystal Reports chọn Add To Existing Report
Chọn report dssv.rpt Nhấn OK
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Thiết kế Report
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Gọi report trong java
Phải add thư viện Crystal Reports Java Project Runtime Library
Kích phải vào project chọn Build Path Add Libraries…
6/1/2010 4
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Gọi report trong java (tt)
Trong chương trình, phải import các lớp sau đây để xem được report: ReportViewerBean OpenReportOptions ReportClientDocument ReportSDKException
Đoạn chương trình hiển thị report trên một JFrame:
…try {
ReportClientDocument doc= new ReportClientDocument();doc.setReportAppServer(ReportClientDocument.inprocConnectionString);doc.open("reports/dssv.rpt", OpenReportOptions._openAsReadOnly);
ReportViewerBean viewer = new ReportViewerBean();viewer.init();viewer.setReportSource(doc.getReportSource());
Đường dẫn của report
OOP JAVATrường Đại học Công nghệ Sài gònKhoa Công nghệ Thông tin
Gọi report trong java (tt)
JFrame frame = new JFrame();
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.getContentPane().add(viewer, BorderLayout.CENTER);
frame.setVisible(true);
viewer.start();
}
catch (ReportSDKException e) {
System.err.println(“Report Error!”);
}
…