Professional Documents
Culture Documents
Danhsach BaitapThuchanh2023 Complete
Danhsach BaitapThuchanh2023 Complete
Năm: 2022-2023.
LAB_01: MỞ ĐÂU......................................................................................................................................6
LAB_06:.....GIAO DIỆN, ĐA KẾ THỪA, CÁC LỚP TRỪU TƯỢNG VÀ QUAN HỆ HIỆN THỰC
HÓA (Realization) GIỮA GIAO DIỆN VÀ LỚP ĐỐI TƯỢNG..........................................................24
Giáo án này chúng tôi biên soạn dựa trên các kiến thức trong giáo án lý thuyết của môn
học. Các bài tập được biên soạn theo tuần tự các chương tương ứng với phần lý thuyết.
Mỗi chương đều được tổ chức thành các phần: mục đích, yêu cầu, nội dung các bài tập và
cuối cùng là bài tập mẫu tương ứng với phần kiến thức trong chương.
Mặc dù đã có sự cố gắng nhưng chắc chắn giáo án thực hành vẫn còn nhiều hạn
chế. Nhóm tả giả rất mong nhận được các ý kiến góp ý của các bạn sinh viên và bạn bè
đồng nghiệp để cuốn giáo án thực hành học phần “Lập trình Java” ngày càng hoàn thiện
hơn.
Xin trân thành cảm ơn!
b. Lớp “Main”, chứa hàm main(): nhập vào một số nguyên n và thực hiện các yêu
cầu tương ứng với các phương thức của lớp “ToanHoc”.
Chương trình
//ToanHoc.java
import java.util.Scanner;
public class ToanHoc{
public static double tinhTong(int n){
double S=0.0;
for(int i=1; i<n;i++){
S+=i/(i+1);
}
return S;
}
public static void main(String args[]){
int n=0;
Scanner w = new Scanner(System.in);
System.out.println(“Nhap n=”);
n=w.nextInt();
System.out.println(“Tong S=”+tinhTong(n));
}
}
LAB_03: LỚP VÀ CÁC THÀNH PHẦN CỦA LỚP
3.1 Mục đích
- Sinh viên viết được các chương trình giải các bài toán theo cách tiếp cận hướng
đối tượng với Java.
- Biết cách viết các phương thức nạp chồng.
3.2 Yêu cầu
- Chuẩn bị trước các bài tập thực hành
- Trang bị đầy đủ kiến thức để hoàn thành nội dung bài LAB
3.3 Nội dung thực hành
- Tạo mới dự án Java với tên “LAB_03” sử dụng lại dự án “LAB_01”.
1. Các thuộc tính: double x, double y là hai giá trị hoành độ và tung độ tương
ứng của một điểm trên mặt phẳng tọa độ.
3. Các phương thức khác tương ứng với các yêu cầu sau:
iii. Tính khoảng cách giữa 2 điểm, biết rằng khoảng cách giữa 2 điểm
A(xA, yA), B(xB, yB) được tính theo công thức sau:
a. AB=
iv. Phương thức main(): nhập 2 điểm A, B. In ra thông tin 2 điểm vừa
nhập và khoảng cách giữa chúng (AB).
2. Lớp “DaGiac” gồm: (OK)
iii. Nhập vào 3 số a, b, c. Kiểm tra xem các số đó có là 3 cạnh của tam
giác hay không?
iv. Nếu đa giác là tam giác, kiểm tra xem đó có là 3 cạnh của tam giác
không? Nếu đúng thì tính diện tích của tam giác bằng công thức
Heron, biết diện tích S:
v. Phương thức main() thực hiện các yêu cầu từ i) đến iv);
o Phương thức main: nhập vào 2 số phức, hiện thị 2 số phức vừa nhập và
in ra số phức là tổng, hiệu, tích, thương của 2 số phức vừa nhập.
- Thực hành thành thạo các thao tác trên mảng và các thao tác trên xâu ký tự.
- Trang bị đầy đủ kiến thức để hoàn thành nội dung bài LAB.
Xây dựng lớp QLKhachHang (mỗi khách hàng gồm các thông tin cần quản lý như bài
tập mẫu chương 3) gồm:
- Các thuộc tính: số lượng khách hàng, mảng các khách hàng
- Các phương thức:
o Khởi tạo
Chương trình
import java.io.*;
public class QLKhachHang{
int soKH;
KhachHang[] mkh;
public QLKhachHang(){
//Tao lap mac dinh
}
public QLKhachHang(int so){
soKH=so;
mkh=new KhachHang[so];
}
public static int nhapInt(){
String s;int n;
/*
DataInputStream stream=new DataInputStream(System.in);
try{
s=stream.readLine();
}catch(IOException e){
s="";
}
*/
s=nhapString();
try{
n=Integer.parseInt(s);
//hoac n=Integer.valueOf(s).intValue();
}catch(NumberFormatException nfe){
n=0;
}
return n;
}
public static String nhapString(){
String s;
DataInputStream stream=new DataInputStream(System.in);
try{
s=stream.readLine();
s=s.trim();
s=s.toLowerCase();
}catch(IOException e){
s="";
}
return s;
}
public void nhapMangKH(){
int n;
//KhachHang mang[];
System.out.print("Nhap vao so KHACH HANG : ");
n=nhapInt();
this.soKH=n;
this.mkh=new KhachHang[n];
for(int i=0;i<n;i++){
System.out.println("------------------------");
System.out.println(" * Khach hang thu "+i);
this.mkh[i]=new KhachHang();
this.mkh[i].nhapKH();
}
}
public void inMangKH(){
System.out.println("\n\nIN MANG KHACH HANG\n");
for(int i=0;i<this.soKH;i++){
System.out.println("------------------------");
System.out.println(" + Khach hang thu "+i);
this.mkh[i].inKH();
}
System.out.println("========================");
}
public void timTenHo(){
String ten;
int n=this.soKH;
boolean danhDau[];
danhDau=new boolean[n];
//khong can thiet doan ma duoi.Co cung duoc khong co cung duoc
// for(int i=0;i<n;i++){
// danhDau[i]=false;
// }
- Làm quen với giao diện, các lớp trừu tượng, quan hệ kế thừa đa trong giao diện
- Cài đặt mối quan hệ triển khai (hiện thực hóa) giữa giao diện và lớp đối tượng.
- Trang bị đầy đủ kiến thức để hoàn thành nội dung bài thực hành.
Tạo mới dự án “LAB_06” cài đặt các lớp trong biểu đồ phân cấp UML sau:
- Tại sao trong lập trình ta thường viết đè phương thức equals thay vì nạp chồng nó?
6.4 Hướng dẫn về giao diện (interface)
Java interface là một cách khác để đạt được một sự trừu tượng trong Java. Giao diện là
một lớp trừu tượng (abstract class) đầy đủ được sử dụng để nhóm các phương thức trừu
tượng liên quan lại với nhau.
Ví dụ:
// interface
interface Animal {
public void animalSound(); // interface method (does not have a body)
public void run(); // interface method (does not have a body)
}
Để truy cập đến các phương thức của interface, interface phải được triển khai
(implemented - kinda like inherited) bởi lớp khác với từ khóa implements (instead of
extends). Thân của phương thức trong giao diện được cung cấp bởi lớp triển khai
("implement" class)
Ví dụ:
// Interface
interface Animal {
public void animalSound(); // interface method (does not have a body)
public void sleep(); // interface method (does not have a body)
}
class MyMainClass {
public static void main(String[] args) {
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound();
myPig.sleep();
}
}
1) Để đạt được tính an nin - ẩn các chi tiết bên trong (các phương thức đều là public và
abstract) và chỉ hiển thị các thông tin quan trọng của một đối tượng (tên các phương thức
trừu tượng – không có nội dung, và các thuộc tính với tính chất public static final – công
khai, đại diện chung cho lớp và không được phép ghi đè).
2) Java không hỗ trợ "multiple inheritance" (một lớp chỉ được phép kế thừa từ một lớp
cha). Tuy nhiên, có thể đạt được quan hệ kế thừa với giao diện, vì một lớp có thể triển
khai (implement) nhiều interfaces.
Lưu ý: Để triển khai nhiều interface, chúng phải ngăn cách nhau bởi dấu phảy.
Ví dụ:
interface FirstInterface {
public void myMethod(); // interface method
}
interface SecondInterface {
public void myOtherMethod(); // interface method
}
class DemoClass implements FirstInterface, SecondInterface {
public void myMethod() {
System.out.println("Some text..");
}
public void myOtherMethod() {
System.out.println("Some other text...");
}
}
class MyMainClass {
public static void main(String[] args) {
DemoClass myObj = new DemoClass();
myObj.myMethod();
myObj.myOtherMethod();
}
}
LAB_07: TỔNG HỢP
7.1. Mục đích
Ôn tập tổng thể các kiến thức đã học qua thực hành gồm:
- Các mối quan hệ kế thừa, phụ thuộc và và quan hệ composition giữa các lớp và
quan hệ triển khai giữa lớp và giao diện
- Hiểu về khái niệm đa hình, bao bọc và che dấu thông tin trong Java
- Hiểu về luồng (thread) trong Java, đa luồng (multi-threads) và phương thức đồng
bộ hóa
- Sinh viên ôn lại toàn bộ kiến thức đã học để chuẩn bị cho nội dung thực hành
- Sinh viên phải có khả năng cài đặt chương trình Java với biểu đồ thiết kế lớp đối
tượng cho trước.
LAB_7A: Bao bọc & che dấu thông tin (Java Encapsulation&information hiding)
Viết chương trình cài đặt các lớp theo sơ đồ thiết kế sau:
LAB_7B: Lớp trừu tượng & lớp cụ thể (Abstract Superclass &Concrete Subclasses)
Viết chương trình cài đặt biểu đồ thiết kế lớp sau:
1. Viết chương trình cài đặt các lớp “HinhTron” – “Cycle” và lớp “HinhTru” –
“Cylinder” có quan hệ kế thừa như biểu đồ hình dưới đây. Viết đề các phương
thức getArea(), toString() trong lớp Hình trụ và minh họa cơ chế đa hình thể hiện
như thế nào?
2. Viết chương trình cài đặt các lớp theo sơ đồ thiết kế sau. Minh họa cơ chế đa hình
thể hiện như thế nào?
Lưu ý: Đa hình rất tiềm lựa trong OOP trong việc phân tách giao diện (interface) và
việc triển khai (implementation) của nó. Điều này cho phép lập trình viên lập trình ở
mức giao diện khi thiết kế một hệ thống phức tạp.
LAB_7E: Luồng, đa luồng và đồng bộ hóa phương thức trong Java (Java Threads,
multi-threads and synchononized methods)
Viết chương trình Java minh họa cơ chế thực hiện đa luồng và minh họa tác dụng của
đồng bộ hóa của phương thức.
Bao bọc là đóng gói các thuộc tính và các phương thức của các đối tượng cụ thể vào
trong một cấu trúc gọi là lớp đối tượng, sau đó với những dữ liệu "sensitive" ta cần
thiết lập với tính chất private để che dấu đi.
- Khai báo các biến/thuộc tính của lớp với tính chất private
- Cung cấp các phương thức get và set để truy cập và cập nhật giá trị của các
biến private.
Polymorphism có nghĩa là đa hình, ví dụ, trong ngành hóa học, carbon biểu hiện cho
tính đa hình vì nó có nhiều hơn một hình dạng: exhibits polymorphism because it can
be found in more than one form: than chì (graphite) và kim cương (diamond). Nhưng
mỗi hình dạng lại có những thuộc tính riêng biệt.
Đa hình xảy ra khi chúng ta có nhiều lớp liên quan với nhau bởi quan hệ kế thừa. Kế
thừa cho phép chúng ta sử dụng các thuộc tính và các phương thức từ lớp khác. Đa
hình sử dụng các phương thức để thực hiện một hành động với nhiều cách khác nhau.
Ví dụ: ta có lớp cha là Animal chứa phương thức animalSound(). Các lớp con của
Animals có thể là Pigs, Cats, Dogs, Birds – và mỗi lớp cài đặt phương thức
animalSound() theo cách riêng (ví dụ pig kêu ụt ịt, và mèo kêu meo, ...):
Ví dụ:
class Animal {
public void animalSound() {
System.out.println("The animal makes a sound");
}
}
class MyMainClass {
public static void main(String[] args) {
Animal myAnimal = new Animal(); // Create a Animal object
Animal myPig = new Pig(); // Create a Pig object
Animal myDog = new Dog(); // Create a Dog object
Animal myCat = new Cat(); // Create a Cat object
myAnimal.animalSound();
myPig.animalSound(); // kêu ụt ịt
myDog.animalSound(); // kêu gâu gâu
myCat.animalSound(); // kêu meo meo
}
}
- Truyền một thông điệp chung đến một đối tượng và mỗi đối tượng có các xử lý
riêng theo ngữ cảnh của mình. Cơ sở của đa hình chính là nạp chồng, viết đè và
kế thừa.
- Một đối tượng có nhiều hình dạng và đặc tính khác nhau tùy theo từng hình
dạng.
Luồng, đa luồng và đồng bộ hóa phương thức trong Java (Java Threads,
multi-threads and synchononized methods)
Các luồng (Threads) cho phép chương trình vận hành một cách hiệu quả hơn bằng cách cho
phép nhiều thứ thực hiện một cách đồng thời.
Các luồng có thể được sử dụng để thực thi các nhiệm vụ phức tạp mà không cần phải ngắt
chương trình chính.
Tạo một Thread
Cách 1: Tạo một luồng bằng cách kế thừa và mở rộng lớp Thread và viết đè phương thức
run() theo cú pháp:
Cách 2: Tạo một luồng bằng cách implement giao diện Runnable theo cú pháp:
- Nếu lớp là mở rộng của lớp Thread, một luồng có thể chạy bằng cách tạo một đối
tượng luồng thuộc lớp này và gọi phương thức start()của nó:
Ví dụ:
- Nếu lớp implements giao diện Runnable, luồng có thể chạy bằng cách truyền thể
hiện của lớp cho phương thức khởi tạo của luồng, sau đó gọi phương thức
start()của luồng.
Ví dụ:
- Đa luồng: cho phép nhiều luồng cùng thực hiện đồng thời
- Đồng bộ hóa: Chỉ cho phép một luồng triệu gọi phương thức đồng bộ hóa thực
hiện tại một thời điểm.
// Constructor
public MovablePoint(int x, int y, int xSpeed, int ySpeed) {
this.x = x;
......
}
......
// Constructor
public MovableCircle(int x, int y, int xSpeed, int ySpeed, int radius) {
// Call the MovablePoint's constructor to allocate the center instance.
center = new MovablePoint(x, y, xSpeed, ySpeed);
......
}
......
Viết lớp Test chứa hàm main với các lệnh như sau:
Viết lớp MovableRectangle, gồm 2 điểm MovablePoints (biểu diễn góc các góc top-
leftvà bottom-right) và implementing giao diện Movable (lưu ý rằng 2 điểm này phải có
cùng speed).
MỘT SỐ BÀI TẬP LÀM THÊM
Bài 1
Một đơn vị sản xuất cần quản lý các cán bộ là công nhân, kỹ sư và nhân viên. Cụ thể:
+Mỗi cán bộ cần quản lý các thuộc tính: Họ tên, năm sinh, giới tính, địa chỉ
+ Các công nhân cần quản lý: Bậc (công nhân bậc 3/7, bậc 4/7 ...)
+ Các kỹ sư cần quản lý: Ngành đào tạo
+ Các nhân viên phục vụ cần quản lý thông tin: công việc
1. Xây dựng các lớp NhanVien, CongNhan, KySu kế thừa từ lớp CanBo. Trong
mỗi lớp xây dựng các hàm nhập và hiển thị thông tin về các thuộc tính của lớp.
2. Xây dựng lớp QuanLyCanBo cài đặt các phương thức thực hiện các chức năng
sau:
- Nhập thông tin mới cho n cán bộ
- Tìm kiếm theo họ tên
- Hiển thị thông tin về danh sách các cán bộ
- Thoát khỏi chương trình.
Bài 2
Một thư viện cần quản lý các tài liệu bao gồm, Sách, Tạp chí, Báo. Cụ thể:
+ Mỗi tài liệu có các thuộc tính: Mã tài liệu, Tên nhà xuất bản, Số bản phát hành.
+ Các loại sách cần quản lý: Tên tác giả, số trang
+ Các tạp chí cần quản lý: Số phát hành, tháng phát hành
+ Các báo cần quản lý: ngày phát hành.
1. Xây dựng các lớp để quản lý các loại tài liệu trên sao cho việc sử dụng lại được
nhiều nhất.
2. Xây dựng lớp QuanLySach cài đặt các phương thức thực hiện các công việc
sau:
- Nhập thông tin về các tài liệu
- Hiển thị thông tin về các tài liệu
- Tìm kiếm tài liệu theo loại
- Thoát khỏi chương trình
Bài 3
Các thí sinh dự thi đại học bao gồm các thí sinh thi khối A, thí sinh thi khối B, thí sinh thi
khối C. Cụ thể:
+ Các thí sinh cần quản lý các thuộc tính: Số báo danh, họ tên, địa chỉ, ưu tiên.
+ Thí sinh thi khối A thi các môn: Toán, lý, hoá
+ Thí sinh thi khối B thi các môn: Toán, Hoá, Sinh
+ Thí sinh thi khối C thi các môn: văn, Sử, Địa
1. Xây dựng các lớp tương ứng để quản lý các thí sinh sao cho sử dụng lại được
nhiều nhất có thể.
2. Xây dựng lớp TuyenSinh cài đặt các phương thức thực hiện các nhiệm vụ sau:
- Nhập thông tin về các thí sinh dự thi
- Hiển thị thông tin về một thí sinh
- Tìm kiếm theo số báo danh
- Kết thúc chương trình.
Bài 4
Để quản lý các hộ dân trong một khu phố, người ta quản lý các thông tin như sau:
- Với mỗi hộ dân, có các thuộc tính:
+ Số thành viên trong hộ (số người)
+ Số nhà của hộ dân đó (số nhà được gắn cho mỗi hộ dân)
+ Thông tin về mỗi cá nhân trong hộ gia đình.
- Với mỗi cá nhân, người ta quản lý các thông tin như: họ tên, năm sinh, nghề
nghiệp.
1. Hãy xây dựng lớp Nguoi để quản lý thông tin về mỗi cá nhân.
Viết các phương thức nhập, hiển thị thông tin cho mỗi cá nhân.
2. Xây dựng lớp Hộ dân để quản lý các thông tin của mỗi hộ dân
Viết các phương thức nhập, hiển thị thông tin cho mỗi hộ dân. Tìm kiếm cá nhân
trong hộ theo họ tên.
3. Xây dựng lớp KhuPho để quản lý thông tin về các hộ dân trong khu phố gồm
các phương thức:
i. Nhập vào một dãy gồm n hộ dân (n - nhập từ bàn phím).
ii. Hiển thị ra màn hình thông tin về các hộ trong khu phố.
iii. Tìm và hiển thị thông tin các cá nhân trong khu phố có họ tên nhập vào từ
bàn phím.
Bài 5
Để quản lý khách hàng đến thuê phòng trọ của một khách sạn, người ta cần quản lý
những thông tin sau:
- Số ngày trọ, loại phòng trọ, giá phòng, và các thông tin cá nhân về mỗi khách trọ.
- Với mỗi cá nhân, người ta cần quản lý các thông tin: Họ và tên, năm sinh, số
chứng minh thư nhân dân.
1. Hãy xây dựng lớp Nguoi để quản lý thông tin cá nhân về mỗi cá nhân
2. Xây dựng lớp KhachSan để quản lý các thông tin về khách trọ.
- Viết các phương thức: nhập, hiển thị các thông tin về mỗi khách trọ
- Hàm main thực hiện các công việc sau:
o Nhập vào một dãy gồm n khách trọ (n - nhập từ bàn phím)
o Hiển thị ra màn hình thông tin về các cá nhân hiện đang trọ ở khách sạn đó.