✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Abstraktit luokat, osa 2 – Abstraktit luokat ja käyttöliittymät

14

Tämän sarjan edellisessä postauksessa kävin läpi:

  • abstraktien luokkien perusteet,
  • miten ne toteutetaan,
  • ja toimitti toimivia koodiesimerkkejä.

Ja vaikka uskon, että abstraktien luokkien ymmärtäminen on avainasemassa luotaessa vahvaa perustaa olio-ohjelmoinnille, huomaan usein, että voi olla hämmentävää verrattaessa niitä rajapintoihin ja tietää, milloin niitä tulee käyttää.

Abstraktit luokat ja käyttöliittymät

Joten tässä postauksessa aion jakaa:

  • nopea päivitys siitä, mitä käyttöliittymät ovat,
  • mitä abstrakteja luokat ovat,
  • ja sitten kuinka tietää, milloin käyttää toista.

Tämän artikkelin ei pitäisi olla koodausintensiivinen, mutta sen pitäisi auttaa tietämään, milloin tietyn tyyppistä koodia tulee kirjoittaa, jotta projekteja voidaan organisoida paremmin.

1 Liitännät

Muista, että mitä tulee rajapintoihin, käytämme myös termiä "ohjelmointi rajapinnalle" ajatuksena on, että rajapinta määrittelee menetelmät, jotka luokan tulee toteuttaa täyttääkseen "sopimuksen" mainitun rajapinnan kanssa.

Peruskäyttöliittymän esittelyyn käytetty koodi oli:

<?php

interface iCache 
{
  public function set($key, $value);
  public function get($key);
  public function has($key);
}

Mutta muista, että käyttöliittymän tarkoitus ei ole määritellä koodin kirjoittamisen jälkeen. Sen sijaan se on työkalu, jolla suunnitellaan, mitä luokkien tulisi toteuttaa, jos ne noudattavat tiettyä paradigmaa tai edellyttävät tiettyjä toimintoja.

Eli jos aiot suunnitella joukon luokkia, jotka toimivat välimuistin kanssa, et kirjoita luokkia ensin. Kirjoitat ensin käyttöliittymän ja sitten luokat toteuttavat mainitun rajapinnan.

Ajatuksena on, että kaikilla rajapinnan toteuttavilla luokilla on taatusti nämä toiminnot.

2 abstraktia luokkaa

Toisaalta abstraktit luokat antavat meille mahdollisuuden tehdä kaksi asiaa:

  1. toteuttaa toimintoja, joita alaluokat voivat käyttää,
  2. toteuttaa menetelmän allekirjoitukset, jotka alaluokkien on toteutettava.

Tämä saattaa aluksi kuulostaa hieman epäjohdonmukaiselta, mutta harkitse tätä:

Kun sinulla on tietyntyyppinen luokka, jolla on johdonmukainen toiminnallisuus alaluokasta riippumatta, toiminnallisuus menee abstraktiin luokkaan. Kun muilla menetelmillä on oltava menetelmän toteutus, annat vain menetelmän allekirjoituksen ja merkitset sen abstraktiksi.

Tässä esimerkki edellisestä postauksesta:

Tämä saa meidät kaikki kiinni aiemmista esimerkeistä ja aiemmista asioista, joihin meidän on keskityttävä koskien käyttöliittymiä ja abstrakteja luokkia, mutta joillekin tämä ei vieläkään tarjoa paljon selkeyttä.

Tarkemmin sanottuna tämä ei vieläkään vastaa kysymykseen: Kuinka päätämme milloin käytämme abstraktia luokkaa ja milloin käyttöliittymää?

Päälle katsottuna se saattaa kuulostaa hieman hämmentävältä, mutta on olemassa muutamia asioita, joiden avulla voit tehdä päätöksen.

Milloin käytämme jokaista?

Muista, että olio-ohjelmoinnin osalta voimme jakaa sen kolmeen eri tavalla:

  • Luokat edustavat asiaa. Voit pitää näitä substantiivina.
  • Attribuutit tai ominaisuudet ovat kuin adjektiiveja. Ne kuvaavat esinettä tai jotain, mitä esine voi sisältää.
  • Menetelmät tai funktiot ovat kuin verbejä. He kuvaavat, mitä vastustaja voi tehdä.

Nyt kun kyse on käyttöliittymästä, mieti mitä käyttöliittymä tekee: Se kuvaa ilman toteutusta, mitä objekti voi tehdä. Ja mitä tulee abstraktiin luokkaan, se kuvaa, mikä objekti on ajon aikana.

Toisin sanoen hyvä nyrkkisääntö on, että jos sinun on määritettävä objektin käyttäytymismallit, käyttöliittymä on oikea tapa edetä. Jos sinun on kuvattava, mikä objekti on, käytä abstraktia luokkaa.

Abstraktien luokkien osalta otan tämän myös askeleen pidemmälle ja sanoisin, että se auttaa kuvaamaan perustietotasoa, joka kuvaa objektia tai mitä se voi tallentaa perustoimintojen lisäksi.

Onko sinulla esimerkkiä?

Kuten useimpien näiden viestien sisällössä, yritän antaa esimerkkejä, vaikka se ei ole erityisesti tehty koodilla. Ehkä tämä selventää asiaa tarkemmin:

  • Liitännöillä ei ole toteutusta. Ne takaavat vain sen, mitä luokka tekee.
  • Abstrakteilla luokilla tulisi olla perustason toteutus. Tämän pitäisi edustaa sitä, mitä luokka voi sisältää ja tehdä, mutta se ei ole täydellinen. Ne vaativat hieman enemmän toteutusta alaluokasta.

Kun työskentelet oliopohjaisen koodin kanssa, toivon, että tämä auttaa antamaan ohjeita siitä, milloin mitäkin käyttää. Jos ei, älä epäröi jättää kommenttia (jollakin jäsenellä on lupa tehdä :).

Lisäksi näemme tämän käytännössä, kun pääsemme kirjoittamaan oliopohjaista koodia (etenkin WordPressille, mutta ei aina).

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja