Python descriptor protokoll analog på andre språk?

stemmer
8

Er det noe som Python descriptor protokollen implementert i andre språk? Det virker som en fin måte å øke modularitet / innkapsling uten oppblåsthet implementeringen inneholder klasse, men jeg har aldri hørt om en lignende ting i andre språk. Er det sannsynlig fraværende fra andre språk på grunn av oppslaget overhead?

Publisert på 29/08/2008 klokken 09:24
kilden bruker
På andre språk...                            


2 svar

stemmer
4

Jeg har ikke hørt om en direkte ekvivalent heller. Du kan sannsynligvis oppnå samme effekt med makroer, spesielt i et språk som Lisp som har ekstremt kraftige makroer.

Jeg ville ikke være i det hele tatt overrasket om andre språk begynner å innlemme noe lignende fordi det er så kraftig.

Svarte 29/08/2008 kl. 09:39
kilden bruker

stemmer
0

Ruby og C # både lett lar deg lage accessors ved å angi getter / setter-metoder for en egenskap, akkurat som i Python. Dette er imidlertid ikke laget for å naturlig la deg skrive koden for disse metodene i en annen klasse måten Python tillater. I praksis er jeg ikke sikker på hvor mye dette betyr noe, siden hver gang jeg har sett en egenskap definert gjennom descriptor protokollen dens blitt implementert i samme klasse.

EDIT: Darn min dysleksi (som jeg mener uforsiktig lesing). Av en eller annen grunn har jeg alltid lest "descriptor" som "dekoratør" og vice versa, selv når jeg er den å skrive dem begge. Jeg lar innlegget mitt intakt siden det har gyldig informasjon, om enn informasjon som har absolutt ingenting å gjøre med spørsmålet.

Begrepet "dekoratør" i seg selv er faktisk navnet på en design mønster som er beskrevet i den berømte "Design Patterns" bok. Wikipedia-artikkelen inneholder mange eksempler på forskjellige programmeringsspråk av dekoratør bruk: http://en.wikipedia.org/wiki/Decorator_pattern

Imidlertid refined i den artikkelen objektorientert; de har klasser som implementerer en forhåndsdefinert grensesnitt som lar en annen eksisterende klasse oppfører seg annerledes eller annen måte, etc. Python dekoratører opptre på en funksjonell måte ved å erstatte en funksjon under kjøring med en annen funksjon, slik at du effektivt endre / erstatte den funksjonen, sette inn kode, etc.

Dette er kjent i Java-verden som Aspect orientert programmering, og AspectJ Java kompilatoren lar deg gjøre slike ting og kompilere AspectJ kode (som er et overordnet sett Java) til Java bytecode.

Jeg er ikke kjent nok med C # eller Ruby vite hva deres versjon av dekoratører ville være.

Svarte 08/09/2008 kl. 01:31
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more