面向对象编程之继承、多态、封装、抽象类、接口、包-下(图书管理系统)
下篇👇
java之String、StringBuffer 、 StringBuilder有什么区别?String不可变?
上篇👇
面向对象编程之继承、多态、封装、抽象类、接口、包-上
概述
使用面向对象思想,运用继承、多态、封装、抽象、接口、包等思想、技术、方法等来实现图书管理系统。
需求分析
图书管理系统首先要有书,书有属性,有名字、价格、作者、书的类型、是否被借阅等,所以可以设计为一个Book 类来存放这些属性。将属性设置为私有,提供对应get和set方法,这就是封装。
图书馆不止一本书,有书架来存放许多书,所以在设计一个BookList类,来存放多本书。书可以被借阅、查询、管理员可以增加书籍等,是不是类似与顺序表或链表的增删查改?可以使用顺序表或链表结构来设计这个BookList类。
可以有两类用户,一个管理员和普通用户,这两类用户都有对书共同的操作,如查阅等,还有自己独有的操作,管理员可以增加或删除书籍,普通用户可以借阅书籍。是不是想到了上篇说的向上转型?所以可以想到,设计一个抽象父类User,有name属性,一系列操作等,然后管理员类和普通用户类继承这个User类,重写父类声明的方法然后来重写这些方法,分别实现自己所独有的操作,也体现了多态。
还有就是两类用户所对应的操作了。他们有相同的操作和不同的操作,可以设计一个接口Operation,它有一个work方法,然后让不同操作去实现它的work方法,这就用到了接口。
最后可以将对有关书籍的类放在同一个包中,将有关操作放在一个包中,将用户类放在一个包中。
核心需求
核心也就是来实现对应的增删查改操作,本质上就是对顺序表的基本操作。这里我使用了简单的顺序表。
🎄简单的登录
🎄管理端de
🎈查阅书籍
🎈增加书籍
🎈删除书籍
🎈显示书籍列表
🎈退出
🎄普通用户端
🎈查询书籍
🎈借阅书籍
🎈归还书籍
🎈显示书籍列表
🎈退出
抽象实现
所需要创建的包和类、接口
👧书类
提供构造方法,加入对应set/get方法
/**
* user:ypc;
* date:2021-04-22;
* time: 15:40;
*/
public class Book {
private String name;
private String author;
private int price;
private String type;
private boolean isBorrowed = false;
public Book(String name, String author, int price, String type, boolean isBorrowed) {
this.name = name;
this.author = author;
this.price = price;
this.type = type;
this.isBorrowed = isBorrowed;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public boolean isBorrowed() {
return isBorrowed;
}
public void setBorrowed(boolean borrowed) {
isBorrowed = borrowed;
}
@Override
public String toS