Cấp bậc tác giả:

TRAINING

JAVA - Lập trình Hướng đối tượng

Được viết bởi webmaster ngày 15/07/2018 lúc 07:50 PM
Java là một ngôn ngữ lập trình hướng đối tượng vì vậy nó cũng hỗ trợ các đặc tính của lập trình hướng đối tượng
  • 0
  • 7383

JAVA - Lập trình Hướng đối tượng

Java là một ngôn ngữ lập trình hướng đối tượng vì vậy nó cũng hỗ trợ các đặc tính của lập trình hướng đối tượng:
  • Đa hình (Polymorphism)
  • Thừa kế (Inheritance)
  • Đóng gói (Encapsulation)
  • Trừu tượng (Abstraction)
Đối tượng trong lập trình Java:

Nếu chúng ta xem xét thực tế chúng ta có thể tìm thấy nhiều đồ vật xung quanh chúng ta: ô tô, chó, con người, v.v... Tất cả các đối tượng này đều có thuộc tính và hành vi.

Nếu chúng ta xem xét một con chó, thuộc tính của nó sẽ là - tên, giống, màu sắc, và các hành vi là: sủa, vẫy, chạy, cắn...Nếu bạn so sánh các đối tượng trong phần mềm với một đối tượng trong thế giới thực, chúng sẽ có đặc điểm rất giống nhau: thuộc tính đối tượng trong phần mềm được lưu trữ trong trường (field) và hành vi được lưu trữ trong phương thức (method).

Class: Chúng ta có thể xem lớp như một khuôn mẫu (template) của đối tượng (Object). Trong đó bao gồm dữ liệu của đối tượng (fields hay properties) và các phương thức(methods) tác động lên thành phần dữ liệu đó gọi là các phương thức của lớp.

Ví dụ:
public class Student{
   String name;
   int id;
   
   void registerCourse(){
   }
    
   void removeCourse(){
   }
 
}
 Cách khai báo:

class<ClassName>
<kiểudữ liệu> <field_1>; 
<kiểudữ liệu> <field_2>; 
constructor 
method_1 
method_2
}
  • class: là từ khóa để khai báo lớp trong Java
  • ClassName: là tên chúng ta đặt cho lớp (quy tắc đặt tên: viết hoa mỗi chữ cái đầu)
  • field_1, field_2: các thuộc tính, các biến, hay các thành phần dữ liệu của lớp (quy tắc đặt tên: chữ cái đầu tiên viết thường, các chữ cái đầu tiên tiếp theo viết hoa).
  • constructor: hàm dùng để khởi tạo đối tượng lớp.
  • method_1, method_2: là các phương thức thể hiện các thao tác xử lý, tác động lên các thành phần dữ liệu của lớp.
Constructor - Hàm dựng

Mỗi lớp thường có một hàm constructor. Nếu chúng ta không khai báo hàm này rõ ràng trình biên dịch Java sẽ tạo một constructor mặc định cho lớp đó.

Mỗi lần một đối tượng mới được khởi tạo, ít nhất một constructor sẽ được gọi. Nguyên tắc chính của constructor là chúng cần phải có cùng tên với lớp. Một lớp có thể có nhiều hơn một constructor.

Ví dụ:
public class Student{
  public String name;
 
   public Student(){
   }
 
   public Student(String name){
      this.name = name;
   }
}
Trong ví dụ trên từ khóa this nhằm chỉ đến chính lớp đang được tham chiếu đến. this.name sẽ tham chiếu đến thuộc tính name của class Student.

Khởi tạo đối tượng (Instance): trong Java để khởi tạo đối tượng chúng ta sử dụng từ khóa new
public class Student{
  public String name;
 
   public Student(String name){
      this.name = name;
   }
   public static void main(String []args){
     Student s = new Student("Mark");
     System.out.println(s.name);
//ket qua in ra Mark
   }
}
 Cách thức truy cập biến và phương thức:
/* Khởi tạo đối tượng */

Object ObjectReference = new Constructor();

/* Gọi biến */

ObjectReference.variableName;

/* Gọi phương thức */

ObjectReference.MethodName();

Case Study
import java.io.*;
public class Employee{
   String name;
   int age;
   String designation;
   double salary;
     
   // This is the constructor of the class Employee
   public Employee(String name){
      this.name = name;
   }
   // Assign the age of the Employee  to the variable age.
   public void empAge(int empAge){
      age =  empAge;
   }
   /* Assign the designation to the variable designation.*/
   public void empDesignation(String empDesig){
      designation = empDesig;
   }
   /* Assign the salary to the variable salary.*/
   public void empSalary(double empSalary){
      salary = empSalary;
   }
   /* Print the Employee details */
   public void printEmployee(){
      System.out.println("Name:"+ name );
      System.out.println("Age:" + age );
      System.out.println("Designation:" + designation );
      System.out.println("Salary:" + salary);
   }
}
import java.io.*;
public class EmployeeTest{
 
   public static void main(String args[]){
      /* Create two objects using constructor */
      Employee empOne = new Employee("James Smith");
      Employee empTwo = new Employee("Mary Anne");
 
      // Invoking methods for each object created
      empOne.empAge(26);
      empOne.empDesignation("Senior Software Engineer");
      empOne.empSalary(1000);
      empOne.printEmployee();
 
      empTwo.empAge(21);
      empTwo.empDesignation("Software Engineer");
      empTwo.empSalary(500);
      empTwo.printEmployee();
   }
}
Kết quả in ra:
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0


Bài tập Thực hành
1. Viết chương trình xây dựng lớp HinhTron, HinhVuong, HinhTamGiac, HinhChuNhat theo phương pháp lập trình hướng đối tượng. 
2. Viết chương trình xây dựng lớp phân số gồm các phương thức Cộng, Trừ, Nhân, Chia, So Sánh 2 PS theo phương pháp lập trình hướng đối tượng 
3. Viết chương trình xây dựng lớp Đồng hồ báo thức 
Gợi ý: 
Lớp = Thuộc tính + Phương Thức 
Thuộc tính: - Giờ, phút, giây 
- Giờ báo thức, phút báo thức 
- Trạng thái hoạt động 
- Thời gian thể hiện báo thức 
Phương thức: - Báo thức 
- Thiết lập thời gian thể hiện báo thức 
- Thiết lập giờ, phút, giây 
- Thiết lập giờ, phút báo thức 
- Thay đổi trạng thái 
Mã nguồn tham khảo:
import java.util.Date;
class AlarmClock
{
private int hour, min, second;
private int alarmH, alarmM;
boolean onOff;
Date d;
AlarmClock(){
d = new Date();
hour = d.getHours();
min = d.getMinutes();
second = d.getSeconds();
}
public void setAlarmTime(int ah, int am)
{
alarmH = ah;
alarmM = am;
onOff = true;
}
 
public void display()
{
System.out.println(hour+":"+min+":"+second);
}
public void switchAlarm()
{
while(onOff==true){
hour = d.getHours();
min = d.getMinutes();
second = d.getSeconds();
if(hour == alarmH && min == alarmM)
{
System.out.println(hour+":"+min);
System.out.println("tic tic tic tic");
onOff = false;
}
}
}
public static void main(String[] args)
{
AlarmClock al = new AlarmClock();
al.display();
al.setAlarmTime(7,55);
al.switchAlarm();
System.out.println("Hello World!");
}
}
4. Viết chương trình xây dựng lớp PhuongTrinhBac1 theo phương pháp lập trình hướng đối tượng. 
5. Viết chương trình xây dựng lớp PhươngTrinhBac2 theo phương pháp lập trình hướng đối tượng. 
6. Viết chương trình nhận đối số là 1 mảng số nguyên, trả về danh sách các phần tử chẵn trong mảng số nguyên đó. 
Gợi ý: 
- Khai báo thư viện util khi thao tác với Vector, Arrays : 
o import  java.util.Vector; 
o import  java.util.Arrays; 
- Khai báo mảng số nguyên a 
o int[] a = new int[sopt]; 
- Viết hàm con trả về danh sách các phần tử nguyên là số chẳn: 
public static int[] mangchan(int[]  d)  
Khai báo mảng a để chứa các phần tử chẳn 
Gán các phần tử chẳn trong d cho mảng a 
return a; 
 
- Tại hàm main()
- Gán int[]  p = mangchan(m); 
- In các phần tử của p ra màn hình 
7. Viết chương trình, xây dựng hàm nhận đối số là 1 mảng điểm trung bình, thuộc số thực, trả về danh sách các điểm  >=4.0 
8. Phí thu gom rác thải 
Công ty VSMT làm nhiệm vụ thu gom rác thải của các hộ gia đình, theo các mô tả sau: 
Xe tải có thể chứa tối đa 10 tấn rác.
Xe tải lần lượt đến từng trạm trung chuyển rác trên tuyến đường theo thứ tự và thu rác. Khi không đủ khả năng lấy hết rác tại 1 trạm thì nó đưa rác đến bãi đổ và quay lại để tải rác lên xe.
Thời gian để tải rác lên xe tại 1 điểm trung bình là 8 phút.
Thời gian đi và về bãi đổ rác trung bình là 30 phút,
Chi phí nhân công và vận tải tính theo giờ là 120000đ/h 
Chi phí phải trả cho bãi đổ rác là 57000đ/xe 
Viết chương trình để ước tính chi phí phục vụ cho việc đấu thầu thu gom rác. Input: dữ liệu đầu vào là khối lượng rác tại mỗi trạm, nhập từ bàn phím. Số trạm kết thúc bởi tổ chức nhập liệu. 
Output: Tính toán và in ra số tiền dự toán chi phí thu gom rác 
Ví dụ: nhập vào lần lượt khối lượng rác tại các trạm theo số lượng(kg) và thứ tự sau 1765 2808 952 4206 3102 3902 1292 3985 8324 1928 4426 397 3277 
Kết quả in ra: 
Tổng chi phí là 910.000đ 
Gợi ý: 
Chi phí phục vụ cho việc đấu thầu = Thời gian * 120.000 + Chi phí trả cho bãi đổ rác; 
-   Khai báo các biến: 
- Tongrac :  chứa rác của từng trạm 
- Thoigian:   thời gian lấy rác tại trạm và( 8 phút ) và thời gian đi về bãi rác ( 30 phút) 
- Khai báo mảng số nguyên chứa khối lượng rác tại mỗi trạm 
- Tại mỗi trạm: 
Tong rac= Tong rac + rac tại trạm; 
Thoigian= Thoi gian + 8 phút 
- Nếu xe đầy rác( 10 tấn rác ): tiến hành đổ rác, Tong rac =0 và thoi gian = thoi gian + 30 phút 
- Trạm cuối cùng : xe chở rác về trạm, thoi gian tăng thêm 30 phút 
Mã nguồn tham khảo:
class QuanLyPhiThuRac
{
final int max_kl= 10000;
final int time_tairac = 8;
final int time_dive= 30;
final int cpnhancong_1p = 2000;
final int cost_dorac = 57000;
double[] tram_rac;
int time;
double chiphi;
double chiphi_dorac;
double cp_nhancong;
public QuanLyPhiThuRac(Double[] x){
tram_rac = new Double[x.length];
for (int i=0;i<x.length ;i++ )
{
tram_rac[i] = x[i];
}
time = 0;
cp_nhancong = 0;
chiphi = 0;
}
public void tinhThoiGian_TaiRac(){
time+= time_tairac;
}
public void tinhThoiGian_dive(){
time+= time_dive;
}
public void tinhChiPhiDoRac(){
chiphi_dorac+=cost_dorac;
}
public void tinhChiPhiNhanCong(int sophut){
cp_nhancong+= sophut*cpnhancong_1p;
}
public void chiPhi(){
int i = 0;
System.out.println(tram_rac.length);
while (i<tram_rac.length-1)
{
int kl_rac = 0;
System.out.println(i);
while(kl_rac + tram_rac[i] <= max_kl)
{
kl_rac+= tram_rac[i];
tinhThoiGian_TaiRac();
i++;
}
if(kl_rac + tram_rac[i] > max_kl)
{
tinhThoiGian_TaiRac();
i++;
}
tinhThoiGian_dive();
tinhChiPhiDoRac();
}
tinhChiPhiNhanCong(time);
chiphi = chiphi_dorac+cp_nhancong;
}
public static void main(String[] args)
{
double[] tram
={1765.0,2808.0,952.0,4206.0,3102.0,3902.0,1292.0,3985.0,8324.0,1928.0,4426.0,397.0,3277.0};
QuanLyPhiThuRac qltr = new QuanLyPhiThuRac(tram);
qltr.chiPhi();
System.out.println("Chi phi = " + qltr.chiphi);
}
}
9. Thuế thu nhập cá nhân được tính theo các qui định sau: 
+ Thu nhập chịu thuế hàng tháng được tính bằng tổng thu nhập trừ các khoản khấu trừ gia cảnh để nuôi con và cha mẹ già. 
+ Mỗi người chỉ được khấu trừ để nuôi tối đa 2 con. Con nhỏ dưới 18 tuổi được khấu trừ 500.000/tháng, con trên 18 tuổi còn đi học được khấu trừ 1.000.000đồng /tháng, con trên 18 tuổi nhưng không đi học hoặc con trên 22 tuổi không được khấu trừ gia cảnh. Nếu có trên 2 con thì lựa chọn khấu trừ cho 2 con có mức khấu trừ cao nhất.
+ Người là con một được khấu trừ để nuôi cả cha lẫn mẹ trên 60 tuổi với mức khấu trừ 1.000.000đ/người( cha mẹ dưới 60 thì con không được khấu trừ gia cảnh), ngược lại chỉ được khấu trừ theo tỉ lệ 100% chia cho số anh chị em ruột còn sống (nghĩa là mức 1.000.000 đồng để nuôi cha mẹ được chia đều cho các con để khấu trừ). Thu nhập chịu thuế dưới 4.000.000 thì được miễn thuế, trên 4 triệu đến 6 triệu tính thuế 5%, trên 6 triệu đến 10 triệu tính thuế 10%, trên 10 triệu tính thuế 20%. 
i. Thiết kế và vẽ sơ đồ các class để mô tả bài toán trên 
ii. Vẽ sơ đồ thuật toán để thể hiện công thức tính thuế trên 
iii. Viết mã đầy đủ để định nghĩa class cho lớp chứa hàm thể hiện công thức tính thuế. 
iv. Các lớp khác chỉ khai báo và định nghĩa để khi dịch không có lỗi. Các khai báo biến thành phần nên chú ý tối ưu hóa để tiết kiệm bộ nhớ và hiệu quả trong tính toán. 
 
Gợi ý: 
- Người thu nhập phải nộp thuế thu nhập theo các quy định sau: 
- Thu nhập thuế = Tổng thu nhập – Khấu trừ gia cảnh 
- Người lao động có thể có nhiều khoản thu nhập khác nhau và phải kê khai đầy đủ nội dung và thu nhập của mỗi khoản thu nhập. 
- Các khoản khấu trừ gồm: 
o Khấu trừ cho bản thân: 4 triệu/ 1 tháng 
o Khấu trừ nuôi con: 500.000đ /1 tháng/ 1 con. Chỉ áp dụng cho con còn đi học hoặc <= 18 tuổi và áp dụng tối đa cho 2 con. 
o Khấu trừ nuôi bố mẹ: 1,6 triệu/1 tháng/ 1 người: nếu bố mẹ có nhiều con thì mức khấu trừ chia đều cho các con có thu nhập trên 4 triệu, chỉ áp dụng đối với bố mẹ > 60 tuổi và Mẹ > 55 tuổi. 
o Thuế suất là 5% với thu nhập chịu thuế <= 2 triệu, và tăng 1 % cho mỗi triệu kế tiếp. 
- Chương trình phải in ra các chi tiết tính khấu trừ và mức thuế phải trả. 
- Sơ đồ: 
o Person: 
String hoten
int Namsinh
boolean gtinh
Person()
Person(3 đối số)
double tinhMucKhauTru()
String toString()
int tinhTuoi()
o Child:
boolean diHoc; 
Child()
Child(4 đối số)
double  tinhMucKT()
String toString() 
o Parent:
Child[] con;
Parent()
Parent(4 đối số)
double tinhMucKT
String toString 
o Income:
String ndThunhap
double soTien
Income()
Income(2 đối số) 
o TaxPayer
Income[] thuNhaps;
Child[] cacCon;
Parent papa, mama;
TaxPayer()
TaxPayer(7 đối số)
double tinhTong()
double tinhTongKT()
double tinhThue()
void inBke()
void addIncome(Income a)
void updateParentInfo(Parent p)
void updateChildren(Child[] con)
main()

Nguồn bài viết: DOTNET.VN

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML