at forstå og anvende polymorfisme i folkesundhedsprogrammet

, forståelse og anvendelse af polymorfisme i folkesundhedsprogrammet,,,,, 22,,,,,,,,, 17,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss.,, objekt orienterede programmering, mangfoldighed, er en stærk og grundlæggende redskab.det kan bruges til at skabe en mere økologisk strøm i din ansøgning.denne lektion vil beskrive det generelle princip om mangfoldighed, og hvordan det kan let blive deployeret i folkesundhedsprogrammet.,,,,,, hvad der er polymorfisme?,, pluralisme er et langt ord for et meget enkelt begreb.,,, - polymorfisme beskriver et mønster i objekt orienterede programmering, hvor klasser har forskellige funktioner, selv om de deler en fælles grænseflade.,,, det smukke ved pluralisme er, at kodeksen at arbejde med de forskellige klasser ikke behøver at vide, hvilken klasse er det ved hjælp af, eftersom de er brugt på samme måde, den virkelige verden analogi for pluralisme er en knap.alle ved, hvordan man bruger en knap: du bare lægge pres på det.hvad for en knap "betyder", afhænger imidlertid af, hvad det er, der er knyttet til og den sammenhæng, hvori den er brugt... men resultatet ikke påvirker, hvordan det anvendes.hvis din chef siger, at du skal trykke på en knap, du har alle de oplysninger, der er nødvendige for at udføre den opgave, i programmeringen, mangfoldighed, bruges til at lave applikationer mere modulopbygget og udbygges.i stedet for rodet betinget erklæringer, der beskriver forskellige fremgangsmåder, du skaber udskiftelige genstande, som du vælger baseret på deres behov.det er det grundlæggende mål for polymorfisme.,,, grænseflader, en integrerende del af pluralisme er den fælles grænseflade.der er to måder at definere en grænseflade i folkesundhedsprogrammet:, grænseflader og abstrakt klasse,.begge har deres anvendelsesformål, og du kan blande dem, som du kan se ind i din klasse hierarki.,, grænseflade, med en grænseflade, svarer til en klasse, bortset fra at det ikke indeholder koden.en grænseflade kan definere metode navne og argumenter, men ikke indholdet af metoderne.alle kategorier af en grænseflade, der skal gennemføre alle metoder, defineret ved grænsefladen.en kategori kan gennemføre forskellige grænseflader, en grænseflade, er angivet ved hjælp af "grænseflade" nøgleord:,, grænseflade myinterface (//- metoder), og er knyttet til en klasse af ", gennemfører, nøgleord (flere interface kan gennemføres ved at angive dem adskilt med kommaer):,, klasse myclass gennemfører myinterface (//- metoder}, metoder, kan defineres grænsefladen, ligesom i en klasse, bortset fra kroppen (del mellem bøjle):,, grænseflade myinterface {offentlige funktion dothis(); offentlig funktion dothat(); offentlig funktion setname ($navn)), og alle metoder her. skal indgå i gennemførelsen af klasser, nøjagtig som beskrevet.(læse koden bemærkninger nedenfor), //gyldig klasse myclass gennemfører myinterface (beskyttede $navn; offentlig funktion dothis() (//kode, der gør denne} offentlig funktion dothat() (//kode, der gør, at} offentlig funktion setname ($navn) ($- > navn = $navn}} /////////////////(klasse myclass gennemfører myinterface mangler dothis()!privat funktion dothat() (//denne skal være offentlige.} offentlig funktion setname() (//mangler navnet argument!}}, abstrakt klasse, en abstrakt klasse er en blanding mellem en grænseflade og en klasse.det kan definere funktioner samt grænseflade (i form af abstrakte metoder).kategorier af en abstrakt klasse, skal gennemføre alle de abstrakte metoder som defineret i abstrakt klasse,.,, en abstrakt klasse angives på samme måde som klasser med tilføjelse af "abstrakte" nøgleord:,, abstrakt klasse, myabstract (//- metoder), og er knyttet til en klasse af "når" nøgleord:,, klasse myclass udvider myabstract (//class methods}, regelmæssige metoder kan defineres på en abstrakt klasse, som i almindelig klasse, såvel som en abstrakt metoder (ved hjælp af ', abstrakt, nøgleord).abstrakt metoder opfører sig ligesom metoder som defineret i en grænseflade, og skal gennemføres nøjagtigt som defineret i forlængelse af klasser, abstrakt klasse, myabstract {offentlige $navn; offentlig funktion dothis() (//det} abstrakt offentlig funktion dothat(); abstrakt offentlig funktion setname ($navn);}, trin 1: identificere problem, lad os forestille os, at du har en artikel, klasse, der er ansvarlig for forvaltningen af artikler på din hjemmeside.det indeholder oplysninger om en artikel, herunder afsnit, forfatter, dato og kategori.her er, hvad det ligner:,, klasse poly_base_article {offentlige $afsnit; offentlige $); offentlige $dato; offentlige $kategori; offentlig funktion __construct ($titel, $forfatter, $dato, $kategori = 0) ($- > afsnit = $afsnit $- > forfatteren = $ophavsmand, $- > dato = $dato $- > kategori = $kategori}}, note:, f.eks. klasse i den pædagogiske anvendelse af navngivningskonvention for "package_component_class." det er en fælles måde at særskilte klasser i virtuelle namespaces at undgå navn sammenstød.,, og nu vil du tilføje en metode til produktion af de oplysninger i forskellige formater, som f.eks. xml og json.man kunne fristes til at gøre sådan noget:,, klasse poly_base_article (//...offentlige funktion skrive ($) {$ret = "; skift ($) {" xml: $ret = < artikel > "$ret. = < afsnit >".$obj - > afsnit. "< /afsnit > "$ret. = < forfatter >".$obj - > forfatter. "< /forfatter > "$ret. = < dato >".$obj - > dato. "< /dato > "$ret. = < kategori >".$obj - > kategori.< /kategori > "$ret. = < /artikel >" pause. "json: $array = system (»arti­kel = > - mål); $ret = json_encode ($array); pause.} tilbage $ret;}), det er en grim løsning, men den virker - - for nu.spørg dig selv, hvad der sker i fremtiden, når vi ønsker at tilføje flere formater?du kan beholde redigering af klassen, idet flere og flere sager, men nu er du kun svækker din klasse.,,, et vigtigt princip for dig er det en klasse skal gøre én ting, og det bør gøre det godt.,,, med dette i tankerne, betingede erklæringer bør være et rødt flag, der angiver, at din klasse forsøger at gøre for mange forskellige ting.det er hvor polymorfisme kommer., i vores eksempel, er det klart, at der er to opgaver forelagt: forvaltning af artikler og formatering deres data.i denne forelæsning, vil vi refactor vores formatering kode ind i en række nye klasser og finde ud af, hvor let det er at bruge polymorfisme.,,, trin 2: at definere deres grænseflade, er det første, vi bør gøre, er at definere grænseflade.det er vigtigt at tænke grundigt over din grænseflade, fordi alle ændringer, kan den kræve ændringer til at kode.i vores eksempel, vi vil bruge en enkelt grænseflade til at definere vores metode:,, grænseflade poly_writer_writer {offentlige funktion skrive (poly_base_article $mål)},, så enkelt er det. vi har defineret en offentlig, write(), metode, der accepterer en artikel objekt som argument.alle kategorier af forfatteren interface vil sikre sig, at denne metode.,,, tip:,, hvis du ønsker at begrænse den type argumenter, der kan overføres til deres funktioner og metoder, kan du bruge type råd, som vi har gjort i den, write(), metode; den accepterer kun genstande af typen, poly_base_article,.desværre vender tilbage - - antyder ikke støttes i den nuværende udgave af folkesundhedsprogrammet, så det er op til dem at tage sig af returnerer værdier.,,, trin 3: skabe deres gennemførelse, med deres grænseflade defineret, er det på tide at skabe de klasser, der gør ting.i vores eksempel, vi har to formater, som vi ønsker at output.vi har således to forfatter klasser: xmlwriter og jsonwriter.det er op til dem at udtrække data fra vedtaget artikel formål og format oplysningerne.,, her er, hvad xmlwriter ligner:,, klasse poly_writer_xmlwriter gennemfører poly_writer_writer {offentlige funktion skrive (poly_base_article $mål) ($ret = < artikel > "$ret. = < afsnit >".$obj - > afsnit. "< /afsnit > "$ret. = < forfatter >".$obj - > forfatter. "< /forfatter > "$ret. = < dato >".$obj - > dato. "< /dato > "$ret. = < kategori >".$obj - > kategori.< /kategori > "$ret. = < /artikel > « tilbage $ret;}}, som du kan se fra klassen erklæring, vi bruger, redskaber, nøgleord for at gennemføre vores interface.det, write(), metode indeholder specifikke funktioner, formatering xml.,, her er vores jsonwriter klasse:,, klasse poly_writer_jsonwriter gennemfører poly_writer_writer {offentlige funktion skrive (poly_base_article $mål) ($array = system (»arti­kel = > - mål), vende tilbage json_encode ($array)}},, vores kode for hvert enkelt format er nu indeholdt i de enkelte klasser.disse klasser hver har eneansvar for at håndtere en bestemt form, og intet andet.ingen anden del af deres ansøgning skal bekymre sig om, hvordan disse arbejde for at bruge det, takket være vores interface.,,, trin 4: brug af deres gennemførelse, med vores nye klasser, det er tid til at genoptage vores artikel klasse.den kode, der boede i den oprindelige, write(), metode er blevet medregnet i vores nye sæt af klasser.alle vores metode er at gøre nu, er at bruge de nye klasser, som denne:,, klasse poly_base_article (//...offentlige funktion skrive (poly_writer_writer $forfatter) {tilbage $forfatter - > skrive ($);}}, hele denne metode er nu acceptere et objekt af forfatteren klasse (det er en klasse af forfatteren interface), dets, write(), metode, at selv ($.) som argument, så dets tilbagevenden værdi direkte til kunden.det behøver ikke længere bekymre os om de nærmere detaljer for formattering af data, og det kan fokusere på de vigtigste opgave.,, at opnå en forfatter, kan man undre sig over, hvor du får en forfatter objekt til at begynde med, siden du er nødt til at gå til denne metode.det er op til dig, og der er mange strategier.for eksempel, du kunne bruge en fabrik klasse 'anmode om data og skabe et objekt:,, klasse poly_base_factory {offentlige statisk funktion getwriter() (//- anmodning variable $format = $_request ['format']; //bygge vores klasse navn og kontrollere dens eksistens $klasse = poly_writer_ ".$format.forfatter. hvis (class_exists ($klasse)) (//tilbage en ny forfatter genstand tilbage nye $class();} //, ellers er vi ikke smide nye undtagelse ('unsupported format)), som jeg sagde, er der mange andre strategier til brug, afhængigt af deres krav.i dette eksempel, en anmodning om variable vælger, hvilke format til brug.den anlægger en klasse navn fra anmodningen variabel, kontrol, hvis det findes, så kommer en ny forfatter objekt.hvis det ikke findes under det navn, en undtagelse er kastet til lad kundekode finder ud af hvad de skal gøre.,,, løntrin 5: sæt det hele sammen med alt på plads, her er, hvordan vores klient kode ville sætte det hele sammen:,, $artikel = nye poly_base_article ('polymorphism "," steve "., time(), 0); prøve ($forfatter = poly_base_factory: getwriter();} fangst (undtagen $e) ($forfatter = nye poly_writer_xmlwriter();} echo $artikel - > skrive ($forfatter), først skabte vi et eksempel artikel formål at arbejde med.så prøver vi at få en forfatter genstand fra fabrikken, falder tilbage til en misligholdelse (xmlwriter), hvis en undtagelse er kastet.vi går imod vores artikel er forfatter, write(), metode, trykning resultatet.,,, konklusion i denne lektion, jeg har givet dig en introduktion til mangfoldighed og en forklaring af grænseflader i folkesundhedsprogrammet.jeg håber, du er klar over, at jeg har kun vist en potentiel anvendelse af polymorfisme.der er mange, mange flere ansøgninger.mangfoldighed er en elegant måde at undslippe fra grim betinget erklæringer i din mand.det følger princippet om, at deres komponenter særskilt, og er en integreret del af mange former for design.hvis du har nogen spørgsmål, så spørg i bemærkningerne.,



Previous:
Next Page: