Ndërfaqja (programimi i orientuar nga objekti)

programimin e orientuar nga objekti, një ndërfaqe ose tip protokolli [a] është një lloj i të dhënave që vepron si një abstraksion i një klase . Ai përshkruan një grup firmash të metodës, zbatimet e të cilave mund të kryhen nga klasa të cilat nuk janë domosdoshmërisht të lidhura logjikisht me njëra-tjetrën. [1] Një klasë që ofron metodat e listuara në një protokoll thuhet se miraton protokollin, [2] ose zbaton ndërfaqen. [1]

Nëse objektet janë të kapsuluar plotësisht, atëherë protokolli është e vetmja mënyrë në të cilën ato mund të aksesohen nga objekte të tjera. Për shembull, në Java, ndërfaqja Comparable specifikon një metodë compareTo() të cilën duhet ta zbatojnë klasat zbatuese të kësaj ndërfaqe. Kjo do të thotë që një metodë klasifikimi, për shembull, mund të renditë një koleksion të çdo objekti të llojeve që zbatojnë ndërfaqen Comparable, pa pasur nevojë të dinë asgjë për natyrën e brendshme të klasës (përveç se dy nga këto objekte mund të krahasohen me anë të compareTo() ).

Disa gjuhë programimi ofrojnë mbështetje të qartë gjuhësore për protokollet ( Ada, C#, D, Dart, Delphi, Go, Java, Logtalk, Object Pascal, Objective-C, OCaml, PHP, Racket, Seed7, Swift, Python 3.8). Në gjuhët që mbështesin trashëgimi të shumëfishtë, si C++, ndërfaqet zbatohen si klasa abstrakte .

Në gjuhët pa mbështetje të qartë, protokollet shpesh janë ende të pranishme si konventa. Kjo njihet si shtypja e rosës . Për shembull, në Python, çdo klasë mund të zbatojë një metodë __iter__ dhe të përdoret si një koleksion . [3]

Klasat e tipit në gjuhë si Haskell, ose nënshkrimet e moduleve në ML dhe OCaml, përdoren për shumë nga gjërat për të cilat përdoren protokollet. 

Rust, ndërfaqet quhen trait. [4]

pub trait Talk{
    fn new(name: &'static str) -> Self;
    fn talk(self);
}

struct Human{ name: &'static str}

impl Talk for Human{

    fn new(name: &'static str) -> Human {
        Human { name: name}
    }
    
    fn talk(self){
        println!("{} is talking ! KABOOM",self.name);
    }
}


fn main(){

    let tom : Human = Talk::new("Tom");

    tom.talk();
}
  1. ^ Usage of these terms varies by programming language. Java and languages derived from it tend to use "interface", while "protocol" is generally more popular elsewhere.
  1. ^ a b "Interfaces - define behavior for multiple types". learn.microsoft.com (në anglishte amerikane). Marrë më 16 nëntor 2022.
  2. ^ Miller, BJ (2015). Sams Teach Yourself Swift in 24 hours. Indianapolis, Indiana. fq. 263. ISBN 978-0-672-33724-6. Any type can adopt a protocol to help give it extra functionality to accomplish a particular set of tasks. {{cite book}}: Mungon ose është bosh parametri |language= (Ndihmë!)Mirëmbajtja CS1: Mungon shtëpia botuese te vendodhja (lidhja)
  3. ^ "Glossary — Python 3.11.0 documentation". docs.python.org. Marrë më 16 nëntor 2022. {{cite web}}: Mungon ose është bosh parametri |language= (Ndihmë!)
  4. ^ "Traits - The Rust Reference". janar 2024. {{cite web}}: Mungon ose është bosh parametri |language= (Ndihmë!)