Ôn tập
Trang 1ĐỀ CƯƠNG ÔN THI JAVA
(bôi đỏ là k12 thi rồi nhé)
Đóng gói là kết quả của quá trình trừu tượng hóa đối tượng
Đóng gói: thông tin và hoạt động bên trong một đối tượng có thể được che khỏi thế giới bên ngoàibằng cách che giấu thông tin và thực hiện ẩn
• Vai trò của tính đóng gói:
Cho phép những người sử dụng chỉ được phép truy nhập và sử dụng những gì quy định cho họ Mộtphần class sẽ được che giấu và không cho người dùng quyền truy nhập
Cho phép người thiết lế các class có khả năng thay đổi hay định nghĩa lại class mà vẫn chắc chắnrằng không ảnh hưởng tới chương trình của những người sử dụng lại class này
• Chúng ta thực hiện bằng cách sử dụng các từ khóa để xác định chức năng truy nhập của cá thông tin dữliệu bên ngoài lớp: public, private và protected
Câu 2: Định nghĩa tính đa hình, ý nghĩa và vai trò của tính đa hình Đa hình luôn đi kèm với một tính năng gì khác của lập trình hướng đối tượng
• Ý nghĩa tính đa hình:
Khi xây dựng các lớp kế thừa trong LTHDT có thể xảy ra trườn hợp trong lớp kế thừa và lớp cơ sởcùng định nghĩa một hành vi(hàm) nào đó có giao diện giống nhau Khi ta gọi hàm này, chương trìnhdịch không thể xác định là ta gọi hành vi nào, hành vi được định nghĩa trong lớp cơ sở hay lớp kế thừa.LTHDT linh động và mềm dèo trong mỗi trường hợp, dễ dàng mở rộng và sử dụng code
• Đa hình luôn đi kèm với sự kế thừa giữa các lớp Các phương thức tổng quát hóa nên có mặt ở lớp cơ
sở, nhưng nội dung của nó chỉ được xác định ở các lớp dẫn xuất cụ thể
Trang 2Câu 4: Tại sao khi thiết kế lớp, thành phần dữ liệu thường được đi kèm với từ khóa private và việc thay đổi dữ liệu thường phải thông qua các phương thức? Khi nào thì các phương thức của một lớp được khai báo là private và vai trò của các phương thức loại này là gi?
• Thành phần private là khu vực dành riêng cho lớp, không chia sẻ với bất kì lớp khác từ bên ngoài.Thành phần private chỉ cho phép truy nhập trong phạm vi nội bộ lớp: Từ phương thức vào các thuộctính hoặc giữa các phương thức của lớp với nhau Các thành phần private không thể truy nhập từ bênngoài lớp, cũng như từ đối tượng khác
Các thuộc tính dữ liệu của lớp được đặt vào vùng private nhằm bảo vệ chúng, tránh sự truy nhập tự
do từ bên ngoài
• Các phương thức trung gian, được sử dụng như các bước tính toán đệm cho các phương thức khác Cácphương thức trung gian được đặt vào vùng private để thực hiện việc đóng gói trong lập trình hướng đốitượng: Các đối tượng, chương trình bên ngoài không cần, và không thể biết cách tính toán cụ thể bêntrong của lớp
Câu 5 Sự khác nhau giữa lớp abtract và lớp thông thường như thế nào, cho ví dụ?
Lớp trừu tượng là lớp mà người sử dụng không được phép tạo ra bất kỳ một thể hiện nào của chính lớp
đó “
Lớp thông thường là lớp mà người sử dụng được phép tạo ra các thể hiện của lớp đó
Trong lớp trừu tượng được phép khai báo các phương thức trừu tượng (chỉ có định nghĩa của hàm còn nội dung của hàm thì không có) và các phương thức này bắt buộc phải được cài đặt ở lớp dẫn xuấtLớp thông thường không có hàm trừu tượng
Lớp trừu tượng là lớp không có khai báo các thuộc tính thành phần và các phương thức Các lớpdẫn xuất của nó sẽ khai báo thuộc tính, cài đặt cụ thể các phương thức của lớp trừu tượng.”
Abstract Class dùng trong ứng dụng là dùng để sử dụng chung cho các đối tượng có chung các thuộc tính hay các chức năng
Normal Class dùng trong ứng dụng để chỉ riêng cho một đối tượng nào đó cụ thể hơn
VD: Human (Con người không biết rõ là ai), Animal (Động vật không biết rõ là con thú nào), Vehicle (Phương tiện đi lại không biết rõ là phương tiện gì)
+ Human:
*****Thuộc tính******
- Tóc, tai, mũi, lưỡi, mắt, tay, chân, mông, bộ phận sinh dục
*****Chức năng*******
- Nghe, nói, đọc, viết, đi, đứng, nằm, ngồi, đi tiểu
(Đó là dành cho tất cả nếu đó là con người)
+ Đối tượng thể hiện cho Normal Class Male, Female
- Anh Nguyễn Văn A: Tóc ngắn - Nghe nói đọc viết thì như người bình thường nhưng lúc
đi Tiểu thì lại đứng khuỵa đầu gối
- Anh Nguyễn Văn B: Đầu trọc - Nghe nói đọc viết thì cũng như người bình thường nhưng lúc đi Tiểu thì lại đứng thẳng chân
- Chị Nguyễn Thị C: Tóc dài thướt tha - Cũng như 2 anh kia nhưng đi Tiểu lại ngồi Bởi thế Human mới được gọi là "TRỪU TƯỢNG" vì mình không thể hình dung đc Human đi Tiểu ra sao? Dáng đẹp thế nào?
Và chính vì những điều trên nên trong lúc Code mới thấy là Abstract Class không thể khởi tạo đối tượng cụ thể đc bởi vì nó là Trừu Tượng nên đâu có thuộc tính cụ thể và chức năng cụ thể giống như một Real Object!!!
Câu 6 Nêu bản chất của cơ chế kế thừa, nêu sự khác biệt giữa mối quan hệ “has-a” và “is a”
• Bản chất của cơ chế kế thừa: Là việc xây dựng một lớp mới dựa trên một lớp có sẵn Trong lớp mới sẽ
sử dụng lại mã code của lớp ban đầu và phát triển them những tính chất mới
• Mối quan hệ has-a: Dùng các đối tượng của các lớp đã có sẵn để xây dựng một lớp mới Điều đó có nghĩa là lớp mới chứa các đối tượng khác bên trong nó, và nó được quyền sử dụng mọi tài nguyên (phương thức) mà các lớp sẵn có đã cung cấp cho nó qua các đối tượng mà nó đang nắm giữ
• Mối quan hệ is-a: Chúng ta xây dựng một lớp mới từ một lớp cũ bằng quan hệ kế thừa Lớp mới này được phép coi như là một đối tượng ở cũ và nó được phép kế thừa tất cả những gì mà lớp cha nó đã có
Trang 3(kể cả những thành phần private) Tuy nhiên việc được dùng các đối tượng này hay không thì phụ thuộc vào quyền truy nhập mà lớp cha đã cho nó (thông qua các chỉ thị protected và public).
Phần 2: Bài tập (cái nào có khả năng “trúng” thì t trình bày trước)
CÂU 7:
Đề bài: Học viện Ngân hàng muốn xây dựng hệ thống giúp sinh viên đăng ký môn học bao gồm những
thông tin sau:
- Mỗi sinh viên có: mã sv, tên, năm vào trường
- Mỗi môn học bao gồm: mã môn, tên môn, danh sách môn điều kiện
- Sau khi học xong, sinh viên được ghi nhận đã đạt môn đó nếu điểm thi của sinh viên đạt từ 5 điểmtrở lên
Khi sinh viên đăng ký môn học, hệ thống sẽ kiểm tra xem sinh viên đã thi đạt tất cả các môn trong điều kiện tiên quyết chưa, nếu điều kiện trên không thỏa mãn in ra thông báo không được phép đăng ký.
a) Mô tả các lớp, giao diện cần xây dựng để đáp ứng yêu cầu của bài toán trên
b) Cài đặt các lớp đã được mô tả
c) Viết chương trình thử thực hiện những chức năng sau:
-Yêu cầu người dùng nhập một mảng gồm 5 sinh viên
- Yêu cầu người dùng nhập một danh sách môn học (khoảng 5-8 môn)
- Yêu cầu người dùng chọn sinh viên muốn đăng ký môn học, chọn môn sinh viên đăng ký, lưu lạithông tin đăng ký nếu thành công còn ngược lại in ra thông báo tương ứng
Trang 4+ checkPass(): boolean
2. Cài đặt
Class SinhVien
/*
* To change this template, choose Tools | Templates
* and open the template in the editor
*/
package bai7;
import java.util.Date;
public class SinhVien {
protected String MaSV;
protected String TenSV;
protected int NamVao;
public String toString(){
return this.MaSV+" "+this.TenSV+" "+this.NamVao;
public boolean checkDSDK(MonHoc mh){
//Lấy dữ liệu từ bảng KQHT của SV
//Kiểm tra kết quả đó với danh sách môn học của môn học "mh" cần đăng ký //Nếu ko thỏa mãn
//return false; còn không
Trang 5* To change this template, choose Tools | Templates
* and open the template in the editor
*/
package bai7;
public class MonHoc {
private String MaMH;
private String TenMH;
public String toString(){
return this.MaMH+" "+this.TenMH;
* To change this template, choose Tools | Templates
* and open the template in the editor
Trang 6this.Diem=0;
}
public KQHT(SinhVien sv,MonHoc mh, int Diem){
super(sv.MaSV, sv.TenSV, sv.NamVao);
public boolean checkPass(){
if(this.Diem<5) return false;
else return true;
* To change this template, choose Tools | Templates
* and open the template in the editor
public static void main(String[] args) {
// TODO code application logic here
//Demo
SinhVien[] sv = new SinhVien[100];
MonHoc[] mh = new MonHoc[100];
//Nhập thông tin môn học
Scanner get = new Scanner(System.in);
for (int i = 0; i < 5; i++)
System.out.println(“Nhập thông tin sinh viên thứ : ”+ (i+1)); sv[i].Input();
Trang 7if (chonMH > 0 && chonMH <= 5) {
//Đăng ký - Vì trong hàm Đăng ký đã có thao tác kiểm tra nên trong này chúng ta không cầngọi nữa
Đề bài: Cửa hàng đĩa CD cho thuê băng đĩa muốn xây dựng hệ thống cho thuê băng đĩa:
- Mỗi đĩa cd sẽ gồm các thông tin sau: Thể loại, tên, số lượng, giá thuê
-Khách hàng đến thuê sẽ cung cấp các thông tin sau: Tên, Địa chỉ, số tiền đặt cọc
- Mỗi lần tới thuê khách hàng sẽ được thuê một hay nhiều đĩa CD, hệ thống sẽ lưu lại ngày thuê, tới khikhách hàng trả đĩa hệ thống sẽ tính số tiền mà khách hàng cần phải đưa thêm sau khi đã trừ đi số tiền mà kháchhàng đã đặt cọc
- Hệ thống sẽ lưu lại thông tin tương ứng của nhân viên đã thực hiện việc cho khách hàng thuê đĩa nhằmthực nhằm đối chiếu khi có sai sót
a) Hãy mô tả các lớp cần thực hiện để xây dựng hệ thống
b) Cài đặt các lớp đã được mô tả
c) Viết chương trình thử nghiệm thực hiện các chức năng sau:
- Nhập thông tin khách hàng
- Nhập danh sách đĩa CD mà khách hàng muốn thuê
- Nhập lượng tiền mà khách hàng đã đặt cọc cho người bán hàng
- Nhập tên nhân viên đã thực hiện dịch vụ cho khách hàng
- Lưu lại thông tin vào file log.txt
- Thông tin cho thuê đĩa của khách hàng: (tên kh)…
Thể loại: nhạc thiểu nhi, tên: Con cò bé bé, số lượng: 1, giá thuê: 1000đ/ngày
Thể loại: phim truyện, tên: Cánh đồng cát, số lượng:2, giá thuế 2000đ/ngày
Số tiền đặt cọc: 100.000đ
-1. Mô tả các lớp
Trang 8- TongTien(CD[] cd, int n): float
- TienThieuHoacThua(float TongTien): float
* To change this template, choose Tools | Templates
* and open the template in the editor
*/
package bai9;
import java.util.Scanner;
public class CD {
private String TheLoai;
private String TenCD;
private int SoLuong;
private int DonGia;
Trang 9public String toString(){
return this.TheLoai+" - "+this.TenCD+" - "+this.SoLuong+" - "+this.DonGia;
}
public void NhapTTCD(){
Scanner get = new Scanner(System.in);
* To change this template, choose Tools | Templates
* and open the template in the editor
*/
package bai9;
import java.util.Scanner;
public class KH {
private String TenKH;
private String DiaChi;
private float DatCoc;
public String toString() {
return "Ten: " + this.TenKH + "\nDia chi: " + this.DiaChi + "\nDat coc: " + this.DatCoc; }
public void NhapTTKH() {
Scanner get = new Scanner(System.in);
Trang 10Scanner get = new Scanner(System.in);
System.out.println("Nhập đĩa CD 1/0 - Yes/No"); checkNhapCD = get.nextInt();
public float TongTien(CD[] cd, int n){
//n là số loại đĩa thuê
//Mỗi lần nhập đĩa ko cho phép trùng thể loại
* To change this template, choose Tools | Templates
* and open the template in the editor
Trang 11// TODO code application logic here
File f = new File("Bai9.doc");
PrintWriter print = new PrintWriter(f);
print.println(cd[k-1].toString());
k ;
} print.println("Tong Tien:"+kh.TongTien(cd, n));
if(kh.TienThieuHoacThua(kh.TongTien(cd, n))>0) print.println("Tien Thua: "+kh.TienThieuHoacThua(kh.TongTien(cd, n)));
else print.println("Tien Thieu: "+ (0-kh.TienThieuHoacThua(kh.TongTien(cd, n)))); print.close();
} catch(Exception e) {
System.out.println(e.toString());
} }}
Câu 4:
Đề bài:Trong hệ thống có các đối tượng sau: Person, Student, Employee, Faculty, and Staff, hãy xây dựng lớp
Person có 2 lớp con là Employee và Student Lớp Faculty và Staff là 2 lớp con của lớp Employee
Một đối tượng Person thì sẽ có các thông tin sau: name, address, phone number, and email address Mộtsinh viên sẽ có một mã trạng thái về lớp học của mình (freshman, sophomore, junior, or senior) Một nhân viênthì sẽ có các thông tin về office, salary, ngày ra nhập Ghi đè phương thức toString() trong mỗi lớp để hiện thitên class và tên của mỗi người
Tạo lớp person:
public class Person {
protected String name,phone,address,email;
public Person(String name, String phone, String address, String email) {
Trang 12public class employee extends Person {
protected String office,salary,time;
public employee(String name,String phone,String address,String email, String office, Stringsalary, String time)
Trang 13public class Student extends Person {
protected String status;
public Student(String name,String phone,String address,String email,String status)
public class Falcuty extends Student{
protected String nameF;
public Falcuty(String name, String phone, String address, String email, String status, StringnameF) {
super(name, phone, address, email, status);
Trang 14public void setNameF(String nameF) {
this.nameF = nameF;
}
}
Main:
public static void main(String[] args) {
Student st= new Student("asd", "asd", "asd", "asda", "as") ;
Đề bài: Một hệ thống ngân hàng xây dựng hệ thống quản lý khách hàng như sau:
- Mỗi khách hàng chỉ được phép có một tài khoản
- Thông tin mỗi khách hàng bao gồm: Mã KH, tên, số chứng minh thư, địa chỉ
- Thông tin mỗi tài khoản bao gồm: Mã TK, khách hàng tương ứng, số tiền
- Mỗi điều chỉnh về thông tin tài khoản sẽ do nhân viên ngân hàng thực hiện theo yêu cầu của khách hàng,thông tin nhân viên bao gồm: MaNV, tên, chi nhánh làm việc
Ngân hàng có thể thực hiện các giao dịch sau:
- Mở một tài khoản mới cho khách hàng, khi tạo mới nếu KH không gửi tiền thì mặc định số tiền là 0
- Gửi tiền vào tài khoản theo yêu cầu của khách hàng rồi cập nhật lại thông tin tài khoản tương ứng
- Rút tiền khỏi tài khoản theo yêu cầu: nếu lượng tiền cần rút nhỏ hơn số tiền còn trong tài khoản thì chophép rút, nêu lớn hơn in ra thông báo
- Sau khi mỗi giao dịch được thực hiện, thông tin thay đổi trên tài khoản sẽ được lưu vào một file log.txt baogồm các thông tin sau:
Tên tài khoản, ngày thực hiện giao dịch, kiểu giao dịch (gửi /rút), số tiền giao dịch, số tiền hiện có trong tàikhoản, mã NV thực hiện giao dịch
a) Hãy mô tả các lớp, giao diện cần xây dựng để đáp ứng yêu cầu của hệ thống
b) Cài đặt các lớp đã được mô tả
c) Viết chương trình thử nghiệm các chức năng sau: Tạo mới tài khoản, gửi tiền vào tài khoản đó, rút tiền rakhỏi tài khỏa
Tạo lớp khách hàng:
import java.io.*;
public class KH implements face{
private String MaKH;
public void setMa(String ma)
Trang 15System.out.println(Diachi);
}
@Override
public void Rut() throws IOException {
throw new UnsupportedOperationException("Not supported yet."); }
@Override
public void viewTK() {
throw new UnsupportedOperationException("Not supported yet."); }
@Override
public void Gui() throws IOException {
throw new UnsupportedOperationException("Not supported yet."); }
public void viewNV() {
throw new UnsupportedOperationException("Not supported yet."); }
}
Tạo lớp nhân viên:
import java.io.IOException;
public class NV implements face{
private String MaNV;
private String TenNV;
private String Chinhanh;
public void Rut() throws IOException {
throw new UnsupportedOperationException("Not supported yet."); }
@Override
public void viewTK() {
throw new UnsupportedOperationException("Not supported yet."); }