Professional Documents
Culture Documents
ООП Предавање 7 - 2015
ООП Предавање 7 - 2015
Ориентирано
Програмирање
Предавањe 7 (13.11.2015)
Финални и абстрактни класи и
интерфејси
2
Ограничување на наследувањето
• Основното однесување на класите при
наследување е дека се наследуваат СИТЕ
атрибути и методи во класата наследник.
• Не постои можност за избирање на што да
се наследи, постои можност само нешто
што е веќе наследено да се препокрие
(override) и со тоа да се измени
наследената функционалност.
3
Final членови
• По дифолт сите методи и променливи можат да
се препокријат (override) во класата наследник.
• Ваквата можност може да се спречи со нивно
декларирање дека се конечни со користење на
клучниот збор “final” како модификатор. На
пример:
– final int oceni = 100;
– final void display();
• Со ова се обезбедува да дефинираната
функционалност во методот нема да може да се
менува.
• Слично на ова вредноста на финал променлива не
може да се менува.
4
Final Класи: Начин за спречување за
наследување
• Може да се спречи налседување на една класа од друга
класа ако таа се декларира како финална.
• Во Јава ова се постигнува со користење на клучниот збор
final:
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
}
}
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; }
…
}
13
Интерфејси
• Interface е концепт сличен на абстрактна класа.
• Интерфејсот може да содржи само константи
(финални променливи) и абстрактни методи (без
имплементација)
• Интерфејс се користи кога поголем број на класи
споделуваат ист дизајн.
• Секоја класа треба (мора) да ги имплементира
интерфејсот
14
Интерфејси се неформален начин за
креирање на групно наследување
• интерфејс е всушност тип на класа бидејќи
содржи методи и променливи но тие мора да
бидат абстрактни методи и финални атрибути-
променливи
• Заради тоа, класата наследник е ОДГОВОРНА да
ги имплементира тие методи ако го
имплементира интерфејсот
• Една класа може да имплементира повеќе
интерфејси едновремено
• Заради тоа интерфејсите се начин за креирање
на групно (mulvple inheritance) наследување во
Јава
15
Пример за интерфејс
<<Interface>>
ISmetka
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”);
}
}
20
Наследување и имплементирање на
интерфејси
• Пример за имплементирање на интерфејс:
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
}
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