You are on page 1of 29

Објектно

Ориентирано
Програмирање
Предавањe 7 (13.11.2015)
Финални и абстрактни класи и
интерфејси

2
Ограничување на наследувањето
•  Основното однесување на класите при
наследување е дека се наследуваат СИТЕ
атрибути и методи во класата наследник.
•  Не постои можност за избирање на што да
се наследи, постои можност само нешто
што е веќе наследено да се препокрие
(override) и со тоа да се измени
наследената функционалност.

3
Final членови
•  По дифолт сите методи и променливи можат да
се препокријат (override) во класата наследник.
•  Ваквата можност може да се спречи со нивно
декларирање дека се конечни со користење на
клучниот збор “final” како модификатор. На
пример:
–  final int oceni = 100;
–  final void display();
•  Со ова се обезбедува да дефинираната
функционалност во методот нема да може да се
менува.
•  Слично на ова вредноста на финал променлива не
може да се менува.
4
Final Класи: Начин за спречување за
наследување
•  Може да се спречи налседување на една класа од друга
класа ако таа се декларира како финална.
•  Во Јава ова се постигнува со користење на клучниот збор
final:

final class Oceni


{ // clenovi
}
final class Student extends Covek
{ // clenovi
}
•  Секој обид за наследување на овие класи од друга класа
ќе предизвика грешка од компајлерот.
5
Абстрактни класи
•  Кога една класа е финална не може да се
наследува. Во одреден ситуации сакаме
својствата на класата обавезно да се наследуваат
и да се користат како такви. Таквите класи се
викаат АБСТРАКТНИ класи

•  Абстрактната класа е концептуална класа

•  Абстрактната класа не може да се инстанцира,


т.е. Не може да се креира објект од неа.

•  Абстрактната класа обезбедува заеднички корен
за група на класи споени во еден пакет.

6
Синтакса за абстрактни класи
abstract class ClassName
{

abstract Type MethodName1();


Type Method2()
{
// method body
}
}
•  Кога една класа содржи еден или повеќе абстрактни методи треба да
се декларира како абстрактна класа.
•  Абстрактните методи од една абстрактна класа МОРА да се
дефинираат во нејзината подкласа (класа наследник)
•  НЕ може да се декларираат абстрактни конструктори или абстрактни
статички методи.

7
пример
•  GeometriskaForma е абстрактна класа

GeometriskaForma

Krug Pravoagolnik

8
Класата GeometriskaForma
public abstract class GeometriskaForma {
public abstract double povrsina();
public void prodvizi() {
// ne-abstrakten metod
// negova implementacija
}
}

•  Дали може да се направи објект?


–  GeometriskaForma s = new GeometriskaForma();
•  НЕ. Бидејќи класата е абстрактна не може од неа да се
креираат објекти.

9
Абстрактни класи
Public Krug extends GeometriskaForma{
protected double r;
protected static final double PI =3.1415926535;
public Krug() { r = 1.0; )
public double povrsina() { return PI * r * r; }

}

public Pravoagolnik extends GeometriskaForma {


protected double w, h;
public Pravoagolnik() { w = 0.0; h=0.0; }
public double povrsina() { return w * h; }
}
10
Својства на абстрактните класи
•  Класа која содржи еден или повеќе абстрактни
методи автоматски е абстрактна и не може да се
инстанцира.
•  Една класа ако е дефинирана како абстрактна, дури и
ако нема абстрактни методи НЕ може да се
инстанцира.
•  Подкласа (класа наследник) на една абстрактна класа
може да се инстанцира ако ги преклопи СИТЕ
абстрактни методи со нивно имплементирање.
•  Подкласа која нема да ги имплеметира сите
абстрактни методи на абстрактната класа предок,
автоматски е и таа абстрактна и не може да се
инстанцира т.е. не може од неа да се креира објект.
11
накратко
•  Ако не сакате својствата од Вашата класа да се
наследуваат и прошируваат од други класи дефинирајте ја
вашата класа како ФИНАЛНА:
–  Се користи Јава клучниот збор “final”.
–  Ова се однесува на класи.
•  ЗБорчето ФИНАЛ може да се употреби и на методи ако
несакате тие да бидат наследени и потоа преклопени.
•  Ако сакате Вашата класа (атрибутите/методите) да бидат
проширени од сите кои ќе ја користат, тогаш дефинирајте
ја како абстрактна класа или пак дефинирајте еден или
повеќе од методите како абстрактни методи.
–  Се користи Јава клучниот збор “abstract”.
–  Ова се однесува на методи.
–  Подкласите мора да ги имплементираат абстрактните методи
инаку не ќе може да се инстанцираат објекти од нив.
12
Интерфејси

13
Интерфејси
•  Interface е концепт сличен на абстрактна класа.
•  Интерфејсот може да содржи само константи
(финални променливи) и абстрактни методи (без
имплементација)
•  Интерфејс се користи кога поголем број на класи
споделуваат ист дизајн.
•  Секоја класа треба (мора) да ги имплементира
интерфејсот

14
Интерфејси се неформален начин за
креирање на групно наследување
•  интерфејс е всушност тип на класа бидејќи
содржи методи и променливи но тие мора да
бидат абстрактни методи и финални атрибути-
променливи
•  Заради тоа, класата наследник е ОДГОВОРНА да
ги имплементира тие методи ако го
имплементира интерфејсот
•  Една класа може да имплементира повеќе
интерфејси едновремено
•  Заради тоа интерфејсите се начин за креирање
на групно (mulvple inheritance) наследување во
Јава

15
Пример за интерфејс

<<Interface>>
ISmetka
povleciPari()

Tekovna Stedna PaypalSmetka


povleciPari() povleciPari() povleciPari()

16
Дефинирање на интерфејси
•  Синтакса - сл. како кај абстрактна класа:
interface InterfaceName {
// Constant/Final Variable Declaration
// Methods Declaration – only method body
}

•  Пример:
Interface ISmetka{
public void povleciPari( );
}

17
Имплементирање на интерфејси
•  Интерфејсите се користат како суперкласи
чии својства се наследуваат од подкласите.
Ова се постигнува со креирање на класа
која ќе го имплементира дадениот
интерфејс:
class ClassName implements InterfaceName [, IName2,…]
{
// Body of Class
}

18
class Tekovna implements ISmetka{
public void povleciPari(){
System.out.println(“vadam od tekovna”);
}
}

class Stedna implements ISmetka {


public void povleciPari (){
System.out.println(“vadam od stedna smetka”);
}
}

class PaypalSmetka implements ISmetka {


public void povleciPari (){
System.out.println(“od paypal J”);
}
}
19
Проширување (наследување) на
интерфејси
•  Исто како класите и интерфејсите можат да се
наследат (прошират). Новиот подинтерфејс ќе ги
наследи сите членови од суперинтерфејсот исто
како кај класите. И овде се користи клучниот збор
extends:

interface InterfaceName2 extends InterfaceName1
{
// Body of InterfaceName2
}

20
Наследување и имплементирање на
интерфејси
•  Пример за имплементирање на интерфејс:

class ClassName extends SuperClass implements InterfaceName [,


InterfaceName2, …]
{
// Body of Class
}

•  Во примерот е прикажана можност каде една класа


наследува друга класа и воедно имплементира еден или
повеќе интерфејси

21
пример
•  Замислете универзитет каде студентите кои учествуваат
на спортски натпревари добиваат поени за тоа. Според
тоа целосните поени за полагање ќе бидат збир на
поените од испит и поените од спортски активности.
Класниот дијаграм би изгледал вака:

Student ISport

extends

Ispit
implements
extends

Rezultat
22
class Student
{
// broj na student I geteri I seteri
}

interface ISport
{
// poenite od sport (na pr. max 10 poeni) i abstraktni metodi
}

class Ispit extends Student


{
// poeni (od test1 i test 2 na primer) i geteri I seteri
}

class Rezultat extends Ispit implements ISport


{
// implementacija na abstraktnite metodi na interfejsot ISport
// dopolnitelni metodi za presmetka na zbirot na poeni;
// ostanati metodi za prikaz itnitn
}

23
Улогата на интерфејсите во
софтверското инженерство
•  Интерфејсите, како абстрактните класи и абстрактните
методи обезбедуваат шаблон (темплејт) за однесување на
други класи кои ги имплементираат
•  Интерфејсите го одделуваат дизајнот од
имплементацијата и со тоа на софтверските дизајнери им
се овозможува да спроведат (задолжително)
програмерски стандарди при имплементирање на
различни класи.
•  Се пренесуваат опис и намена на методите , а не нивна
имплементација.
•  Класите ги имплементираат интерфејсите

24
Повторување на ООП концептите

25
•  Класа (Class) е колекција на податоци и методи
кои оперираат врз тие податоци
•  ОБЈЕКТ е една дадена инстанца на некоја класа
•  Елементите (членовите) од објектот се
користат со помош на операторот точка (Class.v)
•  Променливите на инстанцата постојат во секоја
инстанца на класата посебно
•  Класните променливи се поврзани со дадена
Класа
•  Објектите се креираат (инстанцираат) со клучниот
збор new

26
•  Објектите експлицитно не се ослободуваат или
бришат. Јавата автоматски ги брише и ослободува
простор во меморијата.
•  Јавата обезбедува дифолт конструктор ако не е
дефиниран.
•  Една класа може да ги наследи неприватните методи
и променливи на друга класа со наследување
(субкласирање или проширување), тоа се прави со
клучниот збор extends
•  java.lang.Object е основната суперкласа за секоја
класа. Таа е коренот на целата Јава класна хиерархија

27
•  Преоптоварување на методи (Method overloading)
–  Кога повеќе методи имаат исто име но различни лезно
излезни податоци (аргументи и тип на резултат)
•  Преклопување на методи (Method overriding)
–  Кога класата редефинира наследен метод од својата
суперкласа (класа предок)
•  staPc, private, и final методите можат да се преклопат
•  Од подкласа може експлицитно да се повика
преклопен метод од суперкласата со помош на
клучниот збор super.

28
•  Податоци и методи можат да се сокријат или
енкапсулираат во една класа ако ги подесиме да
бидат приватни или заштитени (private, protected).
•  Абстрактен метод нема тело (имплементација) на
методот. Абстрактна класа содржи абстрактни
методи.
•  Интерфејс е колекција на абстрактни методи и
константи. Една класа спроведува еден интерфејс
кога ќе го декларира со клучниот збор implements , и
со имплементација на сите абстрактни методи.

29

You might also like