Դաս 24։ Java – Abstraction

0

Բառացիորեն կարելի է ասել, որ աբստրակցիան հատկությունն է փոխհարաբվել գաղափարների, այլ ոչ թե իրադարձությունների հետ: Որպես օրինակ դիտարկենք էլեկտրոնային փոստը՝ բարդ մանրամասներով։ Թե ինչ է տեղի ունենում էլեկտրոնային նամակը ուղարկելիս թաքցված է օգտատերից։ Հետևաբար, Ձեզ էլեկտրոնային նամակ ուղարկելու համար պարզապես անհրաժեշտ է մուտքագրել բովանդակությունը, նշել ստացողի հասցեն և սեղմել ուղարկել:

Ինչպես, Object-oriented ծրագրավորման մեջ, աբստրակցիան օգտագտերից գործընթացի իրականացման մանրամասները թաքցնելու գործընթաց է, որի արդյունքում օգտատերին տրամադրվում է միայն ֆունկցիոնալությունը: Այլ կերպ ասած, օգտատրերը ստանում է տեղեկատվություն այն մասին, թե ինչ է անում օբյեկտը, այլ ոչ թե ինչպես է դա անում։

Java-ում աբստրակցիան հասնելու համար օգտագործվում են Abstract դասերը և ինտերֆեյսները:

Աբստրակտ դաս

Այս դասը պարունակում է abstract keyword դեկլարացիայում, և հայտնի է որպես աբստրակտ դաս:

  • Աբստրակտ դասը կարող է պարունակել կամ չպարունակել աբստրակտ մեթոդներ, այսինքն, մեթոդներ առանց մարմնի ( public void get(); )

  • Սակայն, եթե դասը ունի առնվազն մեկ աբստրակտ մեթոդ, ապա դասը պետք է հայտարարգրվի։

  • Եթե դասը հայտարարագրված է որպես աբստրակտ, ապա այն չի կարող առաջադրվել:

  • Աբստրակտ դասը օգտագործելու համար դուք պետք է ժառանգեք այն մեկ այլ դասից, ապահովելով աբստրակտ մեթոդների իրականացում:

  • Եթե դուք ժառանգում եք աբստրակտ դասը, ապա պետք է ապահովվեք բոլոր աբստրակտ մեթոդների իրականացում:

Օրինակ

Ահա աբստրակտ դասի օրինակ: Աբստրակտ դաս ստեղծելու համար, ուղղակի օգտագործեք abstract keyword-ը class keyword-ից առաջ։

/* File name : Employee.java */

public abstract class Employee {

private String name;

private String address;

private int number;

 

public Employee(String name, String address, int number) {

System.out.println(“Constructing an Employee”);

this.name = name;

this.address = address;

this.number = number;

}

public double computePay() {

System.out.println(“Inside Employee computePay”);

return 0.0;

}

public void mailCheck() {

System.out.println(“Mailing a check to “ + this.name + ” “ + this.address);

}

 

public String toString() {

return name + ” “ + address + ” “ + number;

}

 

public String getName() {

return name;

}

public String getAddress() {

return address;

}

public void setAddress(String newAddress) {

address = newAddress;

}

public int getNumber() {

return number;

}

}

Ինչպես տեսնում եք Employee class-ում except abstract մեթոդները նույնն են, ինչ Java-ի նորմալ դասում: Դասը այժմ աբստրակտ է, բայց այն դեռևս ունի երեք դաշտ, յոթ մեթոդ և մեկ կոնստրուկտոր:

Այժմ դուք կարող եք գործարկել Employee class-ը հետևյալ ձևով՝

/* File name : AbstractDemo.java */

public class AbstractDemo {

 

public static void main(String [] args) {

/* Following is not allowed and would raise error */

Employee e = new Employee(“George W.”, “Houston, TX”, 43);

System.out.println(“\n Call mailCheck using Employee reference–“);

e.mailCheck();

}

}

Գործարկելուց կհայտնվի հետևյալ սխալը՝

Employee.java:46: Employee is abstract; cannot be instantiated

Employee e = new Employee(“George W.”, “Houston, TX”, 43);

^

1 error

Inheriting the Abstract Class

Employee class-ի հատկությունները հնարավոր է ժառանգել հետևյալ ձևով՝

Օրինակ՝

/* File name : Salary.java */

public class Salary extends Employee {

private double salary; // Annual salary

public Salary(String name, String address, int number, double salary) {

super(name, address, number);

setSalary(salary);

}

public void mailCheck() {

System.out.println(“Within mailCheck of Salary class “);

System.out.println(“Mailing check to “ + getName() + ” with salary “ + salary);

}

public double getSalary() {

return salary;

}

public void setSalary(double newSalary) {

if(newSalary >= 0.0) {

salary = newSalary;

}

}

public double computePay() {

System.out.println(“Computing salary pay for “ + getName());

return salary/52;

}

}

Այստեղ դուք չեք կարող ստեծել Employee class-ի կրկնօրինակը, սակայն դուք կարող եք ստեղծել Salary Class-ը, ինչպես ներկայացված են ստորև։

/* File name : AbstractDemo.java */

public class AbstractDemo {

 

public static void main(String [] args) {

Salary s = new Salary(“Mohd Mohtashim”, “Ambehta, UP”, 3, 3600.00);

Employee e = new Salary(“John Adams”, “Boston, MA”, 2, 2400.00);

System.out.println(“Call mailCheck using Salary reference –“);

s.mailCheck();

System.out.println(“\n Call mailCheck using Employee reference–“);

e.mailCheck();

}

}

Արդյունքը՝

Constructing an Employee

Constructing an Employee

Call mailCheck using Salary reference —

Within mailCheck of Salary class

Mailing check to Mohd Mohtashim with salary 3600.0

Call mailCheck using Employee reference–

Within mailCheck of Salary class

Mailing check to John Adams with salary 2400.0

Աբստրկատ մեթոդներ

Եթե ցանկանում եք, որ դասը պարունակի որևէ մեթոդ, բայց ուզում եք, որ այդ մեթոդի իրականացումը որոշվի child classes-ի կողմից, ապա դուք կարող եք հայտարարագրել մեթոդը որպես աբստրակտ parent class-ում։

  • abstract keyword-ը օգտագործվում է մեթոդը աբստրկատ հայտարարելու համար:

  • Դուք պետք է տեղադրել abstract keyword-ը նախքան մեթոդի անունը:

  • Աբստրկատ մեթոդը պարունակում է մեթոդի ստորագրություն, բայց ոչ մեթոդի մարմինը:

  • Աբստրակտ մեթոդը վերջում ունի կետ ստորակետ (;)։

Հետևյալը աբստարկտ մեթոդի օրինակ է։

Օրինակ՝

public abstract class Employee {

private String name;

private String address;

private int number;

public abstract double computePay();

// Remainder of class definition

}

Հայտարարելով մեթոդը, որպես աբստրակտ ունի երկու հետևանք՝

  • Այն պարունակող դասը պետք է հայտարարվի որպես աբստրակտ։

  • Այդ դասը ժառանգող ցանկացած դասը պետք է հայտարարի որպես աբստրակտ կամ շրջանցի abstract method-ը։

Ենթադրենք, որ Salary class-ը ժառանգում է Employee class-ը, ապա այն պետք է իրականացնի computePay () մեթոդը, ինչպես ներկայացված է ստորև,

/* File name : Salary.java */

public class Salary extends Employee {

private double salary; // Annual salary

public double computePay() {

System.out.println(“Computing salary pay for “ + getName());

return salary/52;

}

// Remainder of class definition

}

Հարգելի ընթերցող, խնդրում ենք չմոռանալ like տալ մեր ֆեյսբուքյան էջին, քանի որ նորությունների մեծ մասը առաջինը տեղադրվում է հենց այնտեղ։ Ինչպես նաև հետևեք մեզ այլ սոցիալական ցանցերում և, իհարկե, գրանցվեք մեր բլոգում։

Share.