12/08/2018, 13:51

Lập trình OOP với Java

OOP viết tắt của từ Object-Oriented Programming. Có nghĩa là lập trình hướng đối tượng. Ở OOP có 4 tính chất: Tính trừu tượng Tính kế thừa Tính đa hình Tính đóng gói Tính trừu tượng tức là việc tạo ra các abstract method trong interface hay abstract class. Mình chưa cần quan tâm cụ ...

OOP viết tắt của từ Object-Oriented Programming. Có nghĩa là lập trình hướng đối tượng.

Ở OOP có 4 tính chất:

  1. Tính trừu tượng
  2. Tính kế thừa
  3. Tính đa hình
  4. Tính đóng gói
  • Tính trừu tượng tức là việc tạo ra các abstract method trong interface hay abstract class. Mình chưa cần quan tâm cụ thể các class gồm có thuộc tính nào, các method thực hiện cụ thể ra sao. Ta chỉ cần khi báo ra tên của các abstract method để class con kế thừa mà thực hiện cụ thể các method đó. Mục đích của tính trừu tượng là tổng hợp lại những hành vi chung của thực thể.

  • Tính đóng gói là có khả năng đóng gói các thuộc tính, phương thức, dữ liệu của 1 đối tượng. Nó không cho phép truy cập trực tiếp đến dữ liệu mà nó phải thông qua các phương thức được đối tượng cung cấp để truy cập đến dữ liệu của chính nó. Đây là khả năng che dấu dữ liệu rất quan trọng trong lập trình hướng đối tượng.

  • Tính kế thừa là việc lớp con có thể sử dụng lại các thuộc tính, method của lớp cha hay thực hiện cụ thể các method abstract ở lớp cha (abstract method của abstract class với interface). Chính là bước mình extends class với implement interface. Mục đích của tính kế thừa để mở rộng, hạn chế lặp code

  • Tính đa hình tức là bước ở class con mình kế thừa class cha, mình có thể overried (ghi đè) lại method của class cha khi phương thức của lớp con có cùng tên và cùng tham số (cùng kiểu dữ liệu) với phương thức lớp cha. Hay mình cũng có thể overload lại method đã tồn lại trong cùng 1 lớp với tham số truyền vào method đó khác. Mục đích của tính đa hình là để triển khai cụ thể ở class con.

Để hiểu hơn về OOP, chúng ta cùng làm bài toán sau:

Một trường đại học quản lý thông tin cán bộ (gồm giảng viên và nhân viên hành chính) trong trường. Với giảng viên cần quản lý các thông tin: Họ tên, khoa, trình độ (cử nhân, thạc sĩ, tiến sĩ), phụ cấp, số tiết dạy trong tháng ,hệ số lương. Với nhân viên hành chính cần quản lý: Họ tên, phòng ban, số ngày công, hệ số lương, phụ cấp, chức vụ (trưởng phòng, phó phòng, nhân viên). Phụ cấp cán bộ được tính theo bảng: cử nhân 300. thạc sĩ 500. tiến sĩ 1000. trưởng phòng 2000. phó phòng 1000. nhân viên 500. Lương giảng viên được tính như sau: Hệ số lương x 730 + phụ cấp + số tiết dạy x 45. Lương nhân viên được tính như sau: Hệ số lương x 730 + phụ cấp + số ngày công x 30;

Viết chương trình quản lý thông tin cán bộ trong trường bao gồm các chức năng :

  1. Nhập dữ liệu cho các cán bộ trong trường.
  2. Tìm kiếm nhân viên theo tên và phòng ban và in ra màn hình thông tin chi tiết về nhân viên này.
  3. Xuất ra danh sách toàn bộ giảng viên trong trường và sắp xếp tên theo alphabet, nếu trùng tên thì sắp xếp theo lương nhận được từ cao xuống thấp. (Chú ý, danh sách cán bộ giảng viên, nhân viên được in cả cột thông tin lương) Yêu cầu: Áp dụng các kiến thức về lập trình hướng đối tượng để xây dựng chương trình. Sử dụng thành thạo tính chất trừu tượng, đóng gói, đa hình, kế thừa và áp dụng được abstract class và interface trong bài làm. Hàm main chỉ thực hiện gọi đến các chức năng mà không cần viết nghiệp vụ nào khác.

Đây là code của mình xử lý bài toán trên: https://github.com/nguyenvanthieub/OOP

Ở đây, mình đã tạo interface ICanBo với abstract method tinhLuong()

package base;

public interface ICanBo {

	public float tinhLuong();

}

Để cho 2 class con GiangVien và NhanVien kết thừa (implements ICanBo) (thể hiện tính kế thừa).

Bởi vì thấy cả GiangVien và NhanVien đều có chung các thuộc tính: hoTen, heSoLuong, phuCap, luong. Mình đã tạo abstract class CanBo, để cho class GiangVien và NhanVien kế thừa để tránh bị lặp code để cả class GiangVien, NhanVien đều phải viết (thể hiện tính trừu tượng)

package base;

import java.io.Serializable;

public abstract class CanBo implements Serializable{

	private String hoTen;
	private float heSoLuong;
	private float phuCap;
	private float luong;

	public String getHoTen(){
		return this.hoTen;
	}

	public void setHoTen(String hoTen){
		this.hoTen = hoTen;
	}

	public float getHeSoLuong(){
		return this.heSoLuong;
	}

	public void setHeSoLuong(float heSoLuong){
		this.heSoLuong = heSoLuong;
	}

	public float getPhuCap(){
		return this.phuCap;
	}

	public void setPhuCap(float phuCap){
		this.phuCap = phuCap;
	}

	public float getLuong(){
		return this.luong;
	}

	public void setLuong(float luong){
		this.luong = luong;
	}

}

Từ đó, 2 class con GiangVien và NhanVien tự xử lý lại (override) method tinhLuong() cho phù hợp với bài toán. (thể hiện tính đa hình) Ví dụ dưới là class NhanVien

package detail;

import base.CanBo;
import base.ICanBo;
import util.MyEnum.CHUCVU;

public class NhanVien extends CanBo implements ICanBo {

	private String phongBan;
	private CHUCVU chucVu;
	private int soNgayCong;

	@Override
	public float tinhLuong() {
		return this.getHeSoLuong() * 730 + this.getPhuCap() + this.getSoNgayCong() * 30;
	}

	public String getPhongBan(){
		return this.phongBan;
	}

	public void setPhongBan(String phongBan){
		this.phongBan = phongBan;
	}

	public CHUCVU getChucVu() {
		return this.chucVu;
	}

	public void setChucVu(CHUCVU chucVu) {
		this.chucVu = chucVu;
	}

	public int getSoNgayCong() {
		return this.soNgayCong;
	}

	public void setSoNgayCong(int soNgayCong) {
		this.soNgayCong = soNgayCong;
	}

}

Để đảm bảo tính đóng gói, mình đã để các thuộc tính là private, các class khác muốn truy cấp tới thuộc tính của NhanVien thì phải thông qua getter, setter mình đã tạo.

Bài liên quan

Quy tắc viết mã cơ bản trong lập trình web với PHP

Để có thể học php tốt thì điều quan trọng đầu tiên là bạn phải nắm vững được quy tắc viết mã cơ bản trong lập trình web với php. Vì trong lập trình chỉ cần bạn viết sai một ký tự nhỏ dù là dấu phẩy (,) thì chương trình của bạn không bao giờ có thể hoạt động được. Bài viết hôm nay mình ...

Hoàng Hải Đăng viết 10:20 ngày 20/08/2018

Lập trình GUI trong Java

Làm quen với lập trình GUI trong Java thông qua các ví dụ giúp bạn hiểu sâu hơn khái niệm đã trình bày về chủ đề này. Dưới đây liệt kê các ví dụ được sử dụng phổ biến trong khi thực hành lập trình GUI trong Java.

Tạ Quốc Bảo viết 10:49 ngày 14/08/2018

Lập trình CSS với Shoelace.css

Các Frontend Developer cần các tài nguyên tốt nhất để hỗ trợ họ lập trình. Thông thường, họ thường sử dụng Bootstrap framework để hỗ trợ họ lập trình Frontend, vì nó có sẵn các thứ cơ bản cần thiết cho một nhà phát triển giao diện người dùng. Tuy nhiên, có rất nhiều sự lựa chọn khác mà bạn ...

Hoàng Hải Đăng viết 16:47 ngày 12/08/2018

Cách viết một Singleton sao cho đúng trong lập trình IOS với Swift

Trong lập trinh IOS chẳng mấy xa lạ với design pattent Singleton. Nhưng đã bao giờ bạn thực sự để ý cách viết và sử dụng nó sao cho thực sự hợp lý. Trong bài này chúng ta cùng nhau tìm hiểu cách viết và sử dụng singleton trong lập trình IOS cụ thể là ngôn ngữ swift sao cho đúng và hợp lý. Về cơ bản ...

Tạ Quốc Bảo viết 15:47 ngày 12/08/2018

Lập trình C cho hệ thống nhúng (P2- Lập trình nhúng với micro controller V850E)

1. Giới thiệu về micro controller V850E V850 là một dòng vi điều khiển của hãng NEC được sử dụng rộng rãi trong các hệ thống nhúng với nhiều mục đích khác nhau. Vơi ưu điểm lượng tiêu thụ điện năng thấp , mức nhiễu nhỏ trong khi vẫn mang lại một hiệu suất cao và được tích hợp nhiều chức năng. Một ...

Hoàng Hải Đăng viết 14:53 ngày 12/08/2018
0