Ministerul Educației, Culturii și Cercetării al Republicii Moldova
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică și Microelectronică
Raport la
Lucrarea de laborator Nr. 3
Disciplina: Programarea orientata pe obiecte
Tema: ” Polimorfismul si abstractizarea in JAVA”
Au efectuat: Botnaru Alexandru
A verificat: Vadim Eladii
Chișinău – 2020
Obiectivele lucrării:
1. Crearea unui proiect java.
2. Exemplu de polimorfism
3. Exemplu de abstractizare cu utilizarea de interfata
4. Exemplu de abstractizare cu utilizarea de class abstract
5. Adaugarea proiectului în GITHUB
Clasele create:
Abstract Class
public abstract class Employee {
private String name;
private String surname;
private int age;
private char sex;
private String function;
private double baseSalary;
public Employee(int age, char sex, String name, String surname,String function ) {
this.age = age;
this.sex = sex;
this.name = name;
this.surname = surname;
this.function = function;
this.baseSalary = 5000;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getFunction() {
return function;
}
public void setFunction(String function) {
this.function = function;
}
public double getBaseSalary() {
return baseSalary;
}
public void setBaseSalary(double baseSalary) {
this.baseSalary = baseSalary;
}
public void sayHello(String name){
System.out.println("Hello, I'm " + name);
}
public String printAll() {
return
"\nname : " + name + '\n' +
"surname : " + surname + '\n' +
"age : " + age + '\n' +
"function : " + function + '\n' +
"sex : " + sex + '\n';
}
abstract public void work();
abstract public double calculateSalary(double baseSalary);
Class extending Abstract Class
public class Programmer extends Employee {
private String codingLanguage;
private String level;
public Programmer(int age, char sex, String name, String surname, String function, String codingLanguage, String
level) {
super(age, sex, name, surname, function);
this.codingLanguage = codingLanguage;
this.level = level;
}
public String getCodingLanguage() {
return codingLanguage;
}
public void setCodingLanguage(String codingLanguage) {
this.codingLanguage = codingLanguage;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
@Override
public void work() {
System.out.println("I'm Coding...");
}
@Override
public double calculateSalary(double baseSalary) {
return baseSalary+2500;
}
@Override
public String printAll() {
return
"\nname : " + getName() + '\n' +
"surname : " + getSurname() + '\n' +
"age : " + getAge() + '\n' +
"function : " + getFunction() + '\n' +
"codingLanguage : " + codingLanguage + '\n' +
"level : " + level + '\n' +
"salary : " + calculateSalary(getBaseSalary()) + '\n'
}
}
Interface
public interface Worker {
void sayHello(String name);
void work();
double calculateSalary(double baseSalary);
public String printAll();
Class implementing interface
public class Tester implements Worker {
private String name;
private String surname;
private int age;
private char sex;
private String function;
private double baseSalary;
private String typeOfTesting;
public Tester(String name, String surname, int age, char sex, String function,String typeOfTesting) {
this.name = name;
this.surname = surname;
this.age = age;
this.sex = sex;
this.function = function;
this.baseSalary = 5000;
this.typeOfTesting = typeOfTesting;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String getFunction() {
return function;
}
public void setFunction(String function) {
this.function = function;
}
public double getBaseSalary() {
return baseSalary;
}
public void setBaseSalary(double baseSalary) {
this.baseSalary = baseSalary;
}
public String getTypeOfTesting() {
return typeOfTesting;
}
public void setTypeOfTesting(String typeOfTesting) {
this.typeOfTesting = typeOfTesting;
}
@Override
public void sayHello(String name) {
System.out.println("Hello,I'm " + name);
}
@Override
public void work() {
System.out.println("I'm testing apps...");
}
@Override
public double calculateSalary(double baseSalary) {
return baseSalary + 1500;
}
@Override
public String printAll() {
return
"\nname : " + name + '\n' +
"surname : " + surname + '\n' +
"age : " + age + '\n' +
"function : " + function + '\n' +
"sex : " + sex + '\n' +
"salary : " + calculateSalary(baseSalary) + '\n' +
"type of testing : " + typeOfTesting;
}
}
Class that will be inherited
public class PersonalData {
private String name;
private String surname;
private int age;
private char sex;
private String function;
private double baseSalary;
public PersonalData(int age, char sex, String name, String surname, String function) {
this.age = age;
this.sex = sex;
this.name = name;
this.surname = surname;
this.function = function;
this.baseSalary = 5000;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public String getFunction() {
return function;
}
public void setFunction(String function) {
this.function = function;
}
public double getBaseSalary() {
return baseSalary;
}
public void setBaseSalary(double baseSalary) {
this.baseSalary = baseSalary;
}
}
Class that extends an other Class and implements an Interface
public class Designer extends PersonalData implements Worker {
private String type;
public Designer(int age, char sex, String name, String surname, String function,String type) {
super(age, sex, name, surname, function);
this.type = type;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public void work() {
System.out.println("I'm drawing...");
}
@Override
public double calculateSalary(double baseSalary) {
return baseSalary + 1200;
}
@Override
public String printAll() {
return
"\nname : " + getName()+ '\n' +
"surname : " + getSurname() + '\n' +
"age : " + getAge() + '\n' +
"function : " + getFunction() + '\n' +
"sex : " + getSex() + '\n' +
"type : " + type + '\n';
}
public void sayHello(String name){
System.out.println("Hello, I'm " + getName());
}
}
Main:
public class Main {
public static void main(String[] args) {
//polymorphism using abstract class
Programmer programmer1 = new Programmer(25,'M',"Alex","Botnaru","programmer","Java","Junior" );
programmer1.sayHello(programmer1.getName());
System.out.println("My salary is : "+ programmer1.calculateSalary(programmer1.getBaseSalary()));
programmer1.work();
System.out.println(programmer1.printAll());
System.out.println("----------------------------------------");
//polymorphism using interface
Tester tester1 = new Tester("Ion","Osipciuc",24,'M',"tester ","automated ");
tester1.sayHello(tester1.getName());
System.out.println("My salary is : " + tester1.calculateSalary((tester1.getBaseSalary())));
tester1.work();
System.out.println(tester1.printAll());
System.out.println("----------------------------------------");
//using interface and abstract class
Designer designer1 = new Designer(22,'F',"Ana-Maria","Alcaza","designer","UI");
designer1.sayHello(designer1.getName());
System.out.println("My salary is : "+ designer1.calculateSalary(designer1.getBaseSalary()));
designer1.work();
System.out.println(designer1.printAll());
}
}
Result:
Hello, I'm Alex
My salary is : 7500.0
I'm Coding...
name : Alex
surname : Botnaru
age : 25
function : programmer
codingLanguage : Java
level : Junior
salary : 7500.0
----------------------------------------
Hello,I'm Ion
My salary is : 6500.0
I'm testing apps...
name : Ion
surname : Osipciuc
age : 24
function : tester
sex : M
salary : 6500.0
type of testing : automated
----------------------------------------
Hello, I'm Ana-Maria
My salary is : 6200.0
I'm drawing...
name : Ana-Maria
surname : Alcaza
age : 22
function : designer
sex : F
type : UI
Concluzie:
Efectuand aceasta lucrare de laborator, am studiat in special 2 principii ale
OOP: polimorfismul si abstractizarea, utilizand limbajul de programare JAVA.
Pentru aceasta a trebuit sa efectuam un exemplu de polimorfism, unul de
abstractizare utilizind interfata si altul utilizaind clasa abstracta.
In urma efectuarii am inteles esenta acestor principii si ca
abstractizarea nu poate exista fara de polimorfism.De asemenea am insusit
diferentele si asemanarile dintre interfata si o clasa abstracta si diferentele dintre
method overridind si method overloading.