Sąsaja (programavimas): Skirtumas tarp puslapio versijų

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Ištrintas turinys Pridėtas turinys
Nėra keitimo santraukos
Perkelta informacija iš Sąsaja straipsnio
Eilutė 7: Eilutė 7:
Sąsajos yra labai panašios į abstrakčias klases, tik jose, skirtingai nuo [[abstrakti klasė|abstrakčių klasių]], nei viena iš aprašytų funkcijų negali turėti realizacijos aprašo, šis aprašas talpinamas klasėje, kuri išpildo sąsają. Be to, kai kuriose programvimo kalbose klasė gali būti kildinama tik iš vienos tėvinės klasės, tačiau išpildyti daug sąsajų.
Sąsajos yra labai panašios į abstrakčias klases, tik jose, skirtingai nuo [[abstrakti klasė|abstrakčių klasių]], nei viena iš aprašytų funkcijų negali turėti realizacijos aprašo, šis aprašas talpinamas klasėje, kuri išpildo sąsają. Be to, kai kuriose programvimo kalbose klasė gali būti kildinama tik iš vienos tėvinės klasės, tačiau išpildyti daug sąsajų.


Sąsaja apibrėžia bendravimo tarp programinės įrangos komponentų detales – konstantas, duomenų tipus, procedūrų tipus, išimtinius atvejus (''exception'') bei metodų aprašus (''signature''). Taip pat dažnai aprašomos rekomendacijos metodų funkcionalumui.

Programinio modulio <math>A</math> sąsaja specialiai atskiriama nuo modulio realizacijos, kur ne tik realizuojami sąsajos procedūros ir metodai, bet taip pat yra ir privatūs kintamieji bei kita verslo logika. Bet kuris programinis modulis <math>B</math> (modulio ''A'' klientas), bendraujantis su <math>A</math> yra verčiamas naudoti modulį ''tik'' naudojantis sąsaja. To privalumas – bet kada galima pakeisti modulio <math>A</math> realizaciją bet kokia kita realizacija, palaikančia sąsają, ir modulis <math>B</math> veiks be pakeitimų.

=== Sąsajų panaudojimas ===
Sąsajos yra kertinis modulinio programavimo akmuo, taip pat jos yra labai svarbios [[objektinis programavimas|programuojant objektiškai]]. Objektiniame programavime sąsaja apibrėžia aibę metodų (pranešimų), kurių daugumą objektas palaiko.

Skirtingos [[programavimo kalba|programavimo kalbos]] skirtingai palaiko sąsajas. Iš esmės, jas galima realizuoti bet kuria kalba, bet kai kurios kalbos palaiko vienokias ar kitokias sąsajas išreikštinai:
* [[Mesa]]
* [[Modula]]
* [[Modula-2]]
* [[Modula-3]]
* [[Ada]]
* [[Objektinė C]]
* [[Oberon]]
* [[Java (kalba)|Java]]
* [[C sharp|C#]]
* [[Python]]
* [[PHP]]

Yra kalbų, skirtų vien sąsajoms kurti ([[IDL]]).
== Pavyzdys (java) ==
== Pavyzdys (java) ==
Eilutė 21: Eilutė 42:


Sąsajos naudingos kuriant funkcijas, kurių parametrai gali būti įvairių klasių objektai, jei tik šių objektų klasės turi šių funkcijų algoritmams reikalingus metodus (pavyzdyje – figūros plotui sužinoti). Jei objekto klasė išpildo keletą sąsajų, tokios klasės objektas tinka parametru įvairioms funkcijoms, kurių reikalaujamas argumento tipas gali būti bet kuri iš sąsajų.
Sąsajos naudingos kuriant funkcijas, kurių parametrai gali būti įvairių klasių objektai, jei tik šių objektų klasės turi šių funkcijų algoritmams reikalingus metodus (pavyzdyje – figūros plotui sužinoti). Jei objekto klasė išpildo keletą sąsajų, tokios klasės objektas tinka parametru įvairioms funkcijoms, kurių reikalaujamas argumento tipas gali būti bet kuri iš sąsajų.
<!--!
== PHP5 Programavimo kalbos sąsajos ir klasės pavyzdys ==

<?php
// sukuriamas interfeisas pavadinimu „Masina“
interface Masina {
// sukuriama viešai prieinama (public function) funkcija, kurią vėliau reikės aprašyti
public function Judeti();

public function Stoti();

public function Atsigrezti();

// sukuriama tik klasėje prieinama funkcija
protected function Sunaikinti();
}

// sukuriama klasė su pavadinimu „Valdymas“
// „implements Masina“ – nurodome, jog klasė bus aprašyta pagal „Masina“ šabloną
class Valdymas implements Masina {

private $Masina;

// aprašome funkciją, kuri pateikta šablone (interface)
public function Judeti() {
// aprašomas privatus klasėse valdomas kintamasis
$this->Masina = rand(1, 100);

// spausdinamas tekstas
echo „Mašina juda.....<br/>\n“;
}

public function Stoti() {
echo „Mašina sustojo!<br/>\n“;
}

public function Atsigrezti() {
// spausdinamas tekstas su atsitiktiniu skaičiu
echo „Atsigręžėme, ir pamatėme prieš mus lekiančią mašina“ .
„ \“Numeris: „ . rand(1, 100) . “\ ";
}

protected function Sunaikinti() {
unset($this->Masina); // sunaikinamas kintamasis kuris yra „Valdymas“ klasėje
echo „Mašina Sunaikinta!“;
}
}

// sukuriamas „Valdymas“ klasės objektas
$pCar = new Valdymas;
// panaudojame funkcijas iš klasės
$pCar->Judeti();
$pCar->Stoti();
$pCar->Atsigrezti();
$pCar->Sunaikinti();

Ekrane išvysime:
Mašina juda.....
Mašina sustojo!
Atsigręžėme, ir pamatėme prieš mus lekiančią mašina „Numeris ''x''“
Fatal error.....

Kodėl pamatėme „Fatal error“ ?
Ogi todėl, kad funkcija Sunaikinti() yra ne vieša ir prieinama tik klasėse.
Dabar panaudokime taip:

// sukuriamas „Valdymas“ klasės objektas
$pCar = new Valdymas;
// panaudojame funkcijas iš klasės
$pCar->Judeti();
$pCar->Stoti();
$pCar->Atsigrezti();

ir „Fata error...“ klaida pranyko.
!-->


[[Kategorija:Informatika]]
[[Kategorija:Informatika]]

16:50, 8 gruodžio 2010 versija

   Šį puslapį ar jo dalį reikia sutvarkyti pagal Vikipedijos standartus.
Jei galite, sutvarkykite.

Sąsaja – abstraktus objekto klasės aprašas, nusakantis, kokius metodus ši klasė privalo turėti. Tą pačią sąsają gali išpildyti keletas programoje naudojamų klasių. Ta pati klasė neretai išpildo keletą sąsajų. Galima sąsajų hierarchija, paveldint būtinus išpildyti metodus iš vieno ar kelių tėvinių sąsajų.

Sąsajas palaiko daugelis modernių programavimo kalbų (Java, C#). Yra specialių kalbų skirtų išimtinai sąsajoms aprašyti, pvz., CORBA IDL.

Sąsajos yra labai panašios į abstrakčias klases, tik jose, skirtingai nuo abstrakčių klasių, nei viena iš aprašytų funkcijų negali turėti realizacijos aprašo, šis aprašas talpinamas klasėje, kuri išpildo sąsają. Be to, kai kuriose programvimo kalbose klasė gali būti kildinama tik iš vienos tėvinės klasės, tačiau išpildyti daug sąsajų.

Sąsaja apibrėžia bendravimo tarp programinės įrangos komponentų detales – konstantas, duomenų tipus, procedūrų tipus, išimtinius atvejus (exception) bei metodų aprašus (signature). Taip pat dažnai aprašomos rekomendacijos metodų funkcionalumui.

Programinio modulio sąsaja specialiai atskiriama nuo modulio realizacijos, kur ne tik realizuojami sąsajos procedūros ir metodai, bet taip pat yra ir privatūs kintamieji bei kita verslo logika. Bet kuris programinis modulis (modulio A klientas), bendraujantis su yra verčiamas naudoti modulį tik naudojantis sąsaja. To privalumas – bet kada galima pakeisti modulio realizaciją bet kokia kita realizacija, palaikančia sąsają, ir modulis veiks be pakeitimų.

Sąsajų panaudojimas

Sąsajos yra kertinis modulinio programavimo akmuo, taip pat jos yra labai svarbios programuojant objektiškai. Objektiniame programavime sąsaja apibrėžia aibę metodų (pranešimų), kurių daugumą objektas palaiko.

Skirtingos programavimo kalbos skirtingai palaiko sąsajas. Iš esmės, jas galima realizuoti bet kuria kalba, bet kai kurios kalbos palaiko vienokias ar kitokias sąsajas išreikštinai:

Yra kalbų, skirtų vien sąsajoms kurti (IDL).

Pavyzdys (java)

/** Abstrakti geometrinė figūra */
interface Figūra {
    
   /**
   * Trikampiui, kvadratui ar apskritimui plotas skaičiuojamas
   * skirtingomis formulėmis, taigi šis metodas bus išpildytas
   * skirtingai.
   */
   int plotas();
}

Sąsajos naudingos kuriant funkcijas, kurių parametrai gali būti įvairių klasių objektai, jei tik šių objektų klasės turi šių funkcijų algoritmams reikalingus metodus (pavyzdyje – figūros plotui sužinoti). Jei objekto klasė išpildo keletą sąsajų, tokios klasės objektas tinka parametru įvairioms funkcijoms, kurių reikalaujamas argumento tipas gali būti bet kuri iš sąsajų.