n i dung - stu.edu.vn · viết chươngtrình tính diện tích, chu vi hình tròn. vi ế t...

88
1 Trường Đại hc Công nghSài gòn Khoa Công nghThông tin Xây Dng Phn Mềm Hướng Đối Tượng OOP(Object Oriented Programming) Th.s HĐình KhTrường Đại hc Công nghSài gòn Khoa Công nghThông tin Ni dung Chương 1: Tng quan OOP Chương 2: Ngôn ngJava và công c Chương 3: Cài đặt Class và Object Chương 4: Cu trúc tuyn tp. 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 hc Công nghSài gòn Khoa Công nghThông tin Hình thức đánh giá: Thi cui kì: Thc hin mt ng dng trên máy. Tài liu tham kho: [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 Ging- ĐHCNSG Trường Đại hc Công nghSài gòn Khoa Công nghThông tin Chương 1 Tng Quan OOP (Object Oriented Programming)

Upload: others

Post on 09-Sep-2019

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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)

Page 2: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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(),...

Page 3: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 4: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 5: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.

Page 6: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 7: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.

Page 8: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.

Page 9: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 10: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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à ___.

Page 11: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 12: N i dung - stu.edu.vn · Viết chươngtrì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 trung bì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.

Page 13: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

………………

Page 14: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 15: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 16: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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]);

}}

Page 17: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 18: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 19: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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};

Page 20: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 21: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 22: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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;

}

Page 23: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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;

:

:

}

Page 24: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 25: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.*

Page 26: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.*

Page 27: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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);

Page 28: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 29: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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;}

}

Page 30: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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)

Page 31: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 32: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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)

Page 33: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 34: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 35: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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;

}}

Page 36: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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;

Page 37: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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!!!

Page 38: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 39: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 40: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 41: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 42: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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{ }

Page 43: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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();

}

Page 44: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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}

}

Page 45: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.

Page 46: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 47: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 48: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 49: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.

Page 50: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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;

}

}

Page 51: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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);

Page 52: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 53: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 54: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.

Page 55: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.

Page 56: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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);

}

Page 57: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 58: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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()

Page 59: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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()

Page 60: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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); }}

Page 61: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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); }}

Page 62: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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); }}

Page 63: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.

Page 64: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.*;

Page 65: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 66: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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();

Page 67: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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)

Page 68: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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(); } } }

Page 69: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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);

Page 70: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 71: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 72: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 73: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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);…

Page 74: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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()

Page 75: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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()

Page 76: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 77: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.

Page 78: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.

Page 79: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 80: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 81: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 82: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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

Page 83: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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; }}

Page 84: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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();}}

Page 85: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.

Page 86: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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.

Page 87: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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…

Page 88: N i dung - stu.edu.vn · Viết chươngtrì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 trung bình=

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!”);

}