Ugyanez Delphiben egy TLabel-l?
labelBizbasz.Transparent = true;
Egészen zseniális. Összehasonlításképp a WinFormsos megfelelő.
És akkor trükközzünk még egy picit: szeretnénk a formon változtatni a betűtípust, de úgy, hogy a méretet már az adott Control-n adjuk meg. Delphiben ugye erre volt a TControl.ParentFont (és társai) property. WinForms alatt a szívás van.
Persze, egy szóval nem állítom, hogy a C# nyelv nem lenne egy modernebb nyelv. Jóval modernebb sok szempontból. Viszont azért az újabb versenyzőkben is vannak olyan dolgok, amikre néha az ember csodálkozva pislog, hogy ezt mégis miért, mikor egy jóval régebbi megoldásban szépen meg volt valósítva. És arról nem is beszélve, hogy a WinFormson nagyon látszik, hogy a Delphi (is) volt az a szellemi őse.
Jut eszembe, Delphi: csak szerintem eddig az egyetlen programnyelv (és környezet - VCL), amit pont arra használtak, amire kitalálták? Windowsos alkalmazások fejlesztése, gyorsan?
És ha már szóba került az OOP is, arról is ejtsünk már pár szót. Nem olyan rég, kaptam valakitől egy kritikát, hogy mégis mit csinálok, mi a fenéért rakom bele a metódusokat egy adatosztály belsejébe?! Merthogy azt úgy kellene, hogy készítek egy osztályt, amiben csak adattagok vannak (+ a hozzájuk tartozó setter/getter -- autopropertyvel ez ugye egyszerű meg gyors is lesz) és egy külön osztályba kellene kiszerveznem azokat a metódusokat, amelyek dolgoznak az objektumon, merthogy ez mostanság így szokás, meg így lesz csudaenterspájz és a többi.
Mondom WTF? Ezzel az erővel visszamehetnénk a jó öreg pre-ObjectPascal/C időkbe, ami kb. pont ugyanez, csak recordokkal és a függvények egységbe zárását a fájl jelképezte. Nem olyan hülyeség az, ha az ember először megtanul programozni, aztán megismerkedik az OOP használatával és azután a tervezésével. (Szvsz: OOP-t használni jó és nagyon hatékony tud lenni fejlesztés szempontjából. De ha nagyobb, komplexebb osztályhierarchiát kell készíteni, akkor a tervezése nagyon szívás tud lenni.)
-
Ui: mielőtt elkezdődne a flame, hogy deaC#azmennyire jó. Igen, tudom, szeretem is használni azt a nyelvet. Csak néha vannak benne érdekes dolgok. Mint mindenben.
- saxus blogja
- A hozzászóláshoz be kell jelentkezni
- 2805 megtekintés
Hozzászólások
Én a Javát utálom ugyanezért. Maga a nyelv még elmegy, ugyan annak is vannak hibái, dehát a C-nek is. Viszont a library-k, amiket a Javához lehet kapni, azok iszonyúak... legalábbis a standard lib-ek, mert az összes 3rd party lib-et még nem ismerem...
- A hozzászóláshoz be kell jelentkezni
"mert az összes 3rd party lib-et még nem ismerem..."
Nah, engem meg többek között ez riaszt el a "Java economy"-tól. Szétszórt, bazári, kívülről. Egyszer kaptam egy Java-s SOAP-s tesztprogramot, 10 megás JAR fájl volt, lényegi része kb. 20 sor a main() metódusban.
(Illetve már ott is voltak cifra dolgok, mint pl. a Main metódusban csak példányosítunk egy objectet és meghívunk rajta egy metódust, aminek következtében így nézett ki a kód:
class Main
{
public static main(String[] args) {
Main main = new Main();
main.Main();
}
private void Main() {
// Lényegi részek, kb. 20 sor.
}
}
Az egészben az volt a legszebb, hogy ha lett volna normális WSDL fájl, tetszőleges random IDE-be behúzva meg tudtam volna írni ugyanazt a 20 sort.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
1, aki irta, az nem a szakmaba valo. ezen meg lehet lepodni?
2, nem hiszem, hogy 10 mega volt a jar, ha igen, akkor nem emiatt, ugyanis a standard JRE resze a JAXB, illetve a JAX-WS.
- A hozzászóláshoz be kell jelentkezni
Teljesen mindegy, hogy mit hiszel és mit nem, attól még abba a 10 megás JAR fájlba bele volt túrva a fél világ, csak azt nem értem, miért.
Majd előkeresem, hogy mi volt benne.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
ez nem hit kerdes, naponta foglalkozom ilyenekkel. az, hogy neked valaki mit csomagol bele, kevesbe erdekel. az, hogy ez alapjan leirod az egesz Javat, meg rolad mond el valamit, plane ha utana megmondtak, hogy ezt meglehet szepen is csinalni.
nekem van egy WS kliensem pl, 112k a JAR jelenleg. ez ugy 4-5 WSt hasznal.
- A hozzászóláshoz be kell jelentkezni
Akor felreertettel: nem a Javaval van a (legfobb) bajom, hanem azzal, hogy mindenfele bloatware szemetet es ahogyan egymashoz kapcsolnak, hogy hasonlo szornyszulottek jojjenek letre.
Bar az is lehet, h a Java economy kifejezest hasznaltam rosszul (Java nyelv + J2S/M/EE + kulonfele cegek, szervezetek, kulonfele egymassal jobban-rosszabbul megvalositott es csereszavatos, szeles korben elterjedt, hasznalt komponensek, amelyek szervessen kapcsolodnak a Java - es folega J2EE - vilagahoz).
Ettol fuggetlenul nem allitom egy szoval se h a 10 megas JAR fajl nem volt egy kontarmunka. Reszleteket a projektrol, amihez kaptuk, sajnos nem mondhatok.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
A vuze (azureus) azureus2.jar fileja 13,3MB. Bár az is igaz, hogy ebbe még az automatikusan települő pluginek is bele vannak rakva.
--
Don't be an Ubuntard!
- A hozzászóláshoz be kell jelentkezni
Miért WinFormsban kezdted egy UI prototípus lekódolását?
--
ahan nem
- A hozzászóláshoz be kell jelentkezni
Miért, mibe kezdjem, ha mögöttes, működő kódot is mögé szeretnék rántani, ami rendes, valós adatokkal operálna? :)
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
WPF-ben sokkal könnyebben lehet parasztvakítós UI-t írni, ha csak ez a cél. A binding meg data template elég egyszerűvé teszi a custom objektumok megjelenítését is. A XAML deklaratív jellege miatt mondjuk más szemlélet kell hozzá, mint WinFormshoz, úgyhogy ha nem ismered és gyorsan kell valami eredmény akkor nyilván ez nem lesz jó választás.
--
ahan nem
- A hozzászóláshoz be kell jelentkezni
Hihi :) Welcome to OO ;) Viccen kivul, mar a marketing gepezet is hazudik es sokan beszopjak (pl kod ujrafelhasznalasra speciel nagyon nem elonyos az OO).
A masik, hogy miert raknad kivulre a metodusokat. Nos, ennek eppenseggel lehet oka meg az OO keretein belul is. Plusz megjegyzem a regi modi sem lebecsulendo. Pont annyi erv van a becsomagolas mellett mint ellen.
Ha az OO-t kicsit messzebbrol nezem, akkor erdemes megnezni par Joe Armstrong eloadast (nekem eloben is volt a palihoz szerencsem) amiben az OO alapveto hibairol (es egy pikans tortenelmi benezesrol) mesel. Erdemes. Aztan johet pl. egy stanford egyetemi eloadas, amiben pont az OO es a mostanaban trendi programozas bajait feszegetik, csak lathatoan nem tudnak rola hogy Joe bacsi a problemat mar 20 evvel korabban megcelozta (es eleg jol meg is oldotta).
Mondhatnam igy is, hogy a telko vilagban sok olyan problemat megoldottak mar korabban, amivel most az internetes vilag szenved. asn1, erlang futasi modell, maguk a tavkozlesi protokollok, stb.
Ez van, minden uj generacio vegigszopja elolrol az egeszet, ez mar csak ilyen ;)
- A hozzászóláshoz be kell jelentkezni
Nahat, ritkan latni hogy valaki a mainstream nyelveken kivulre mereszkedik, latott mar erlang-ot, es Joe Armstrong munkajat is ismeri...
Az egekig magasztalt OO nyelvekrol nekem mindig a spanyolviaszkutatas legujabb eredmenyei jutnak eszembe, kulonosen, amikor egy ot osztalybol allo abszolut trivi uml class diagram 14 OO nyelven tortenoi implementacioja 10 fele modon mukodik. Eljen a late bindig schematics!
- A hozzászóláshoz be kell jelentkezni
XAML, WPF neadjisten MVVM-t nehogy meg merjen valaki itt említeni!
Engem azert erdekelne, hogy miert nem kedveled. :)
- A hozzászóláshoz be kell jelentkezni
XAML: XML. Minek? (Igen, tudom, Delphinél is ott volt a DFM, azért picit más volt az).
MVVM: Ordasmód túlbonyolított, és gigantikus mértékű felesleges kódtömegeket kell írni, amely nem picit megnehezíti a karbantartást, többek között. Tudom, nagyon nem egészen ugyanaz, de pl. egy Delphi-s ActionManager szerintem használhatóbb lenne. Ha használnom kell, inkább olyan érzésem van, hogy egy halom plusz terhet ad a nyakamba az esetek legnagyobb részében egy viszonylag elenyésző előnyért (amely egyébként a régi modellben is tök jól működhetne annak kisebb-nagyobb javítása után), ahelyett, hogy segítené és gyorsítaná a munkám.
Amikor egy gomb felhelyezése, és a hozzá tartozó eseménykezelő megírása között nekem meg kell írni vagy 30-40 sornyi kódot, akkor szerintem ott valami baj van.
Mondjuk az egész már ott el van kúrva, hogy az egész desktopon bejáratott modelleket megpróbáljuk egy az egyben átültetni webre elfedve a két platform közötti ordító különbségeket.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
XAML: Kulon van a megjelenites a kodtol. Atlathatobb mint a tobb szaz, vagy ezer soros Initialize...() fuggveny.
MVVM: Nem tudom, hogy ujat mondok-e, de nem muszály hasznalni. Ha akarja az ember hasznalhatja ugy az egeszet mint delphiben, vagy winforms-nal. Behuzza a controlt, properties tab-on beallitja amit kell, events tabon meg az esemenyeket. Kozben nem latott senki xaml-t, es nem is kellett semmilyen MVVM-el bajlodni. Ha meg mar akkora a project, hogy kell, akkor meg lehet hasznalni akar kulonbozo mvvm frameworkoket.
Mondjuk az egész már ott el van kúrva, hogy az egész desktopon bejáratott modelleket megpróbáljuk egy az egyben átültetni webre elfedve a két platform közötti ordító különbségeket.
Szerintem ez az egyik legfobb erenye a wpf-nek.
Szerk.: Persze mindenki dolgozzon abban amiben otthonosan mozog/kedvel, viszont a felhozott erveid nem tul meggyozoek. Ha azt irtad volna hogy az a baj, hogy uj dolgokat/szemleletet kellene megtanulnod, jobban el lehetne fogadni. :)
- A hozzászóláshoz be kell jelentkezni
"Kulon van a megjelenites a kodtol. "
Azzal, hogy definiálok XML-ben egy felületet és ahhoz hozzáreszelek még kódot - mert előbb-utóbb előjön az, hogy van kód, ami igazából a megjelenítéshez tartozik - akkor jön egyeseknél a fejvakarás.
"Behuzza a controlt, properties tab-on beallitja amit kell"
Ilyenkor szoktam megkapni, hogy mégis hogy képzelem ezt :) A behúzza részével meg annyi a problémám, hogy valahogy nem olyan kényelmes, mint a Delphi-s designer vagy a WinFormsos kattintgató. Abban, mondjuk igazat adok akárkinek, hogy ahhoz képest az XML-t gyorsabb megírni, mint XAML-t összekattintgatni, mert az valami ritka kényelmetlenre sikeredett.
"Atlathatobb mint a tobb szaz, vagy ezer soros Initialize...() fuggveny."
Erről eszembe jut most az, amikor az MS által kiadott WPF-s ribbon demót próbáltam átrakni egy saját projektbe. Nah, ott is volt kopipaszta módszerrel átmásolt néhányszáz sornyi XAML kód, ami szinte "csak úgy kellett". Ahhoz képest egy 3rd party Delphis, kattintgatós komponens maga a megváltás volt.
"akkor meg lehet hasznalni akar kulonbozo mvvm frameworkoket."
"Szerintem ez az egyik legfobb erenye a wpf-nek."
Nah, épp ez a másik bajom az egésszel: megpróbál elrejteni olyan dolgokat, amik már eleve nem kevés absztrakciót tartalmaznak.
"Ha azt irtad volna hogy az a baj, hogy uj dolgokat/szemleletet kellene megtanulnod"
Áh, ha 10-20 évvel régebb óta űzném az ipart, akkor lehet jobban hisztiznék emiatt. Most csak szimplán nem látom azt a mindent beragyogó fényes üstököst, ami miatt annyira jó lenne a régebbi technológiákhoz képest. Főleg, hogy valahol arra van ráépítve az egész.*
No mindegy. Lényeg, hogy nem veszik el a lényeg (alkalmazások fejlesztése) és továbbra is szép, gyors, egyszerű alkalmazásaink születnek.
* Fú, ezekkel külön nem vagyok kibékülve: pl. SOAP. Alapvetően tök jó dolog lenne, mert elrejthetné a kommunikációt az egész képletből (és akkor el is jutunk oda, hogy mi a francnak a borzasztó erőforrás-igényes és nagyon durván túlbonyolított XML, ha egy sokkal CPU és erőforrás-kímélőbb módon is lehetne adatot továbbítani), csak aztán jön egy jól informált szakember, aki meginnoválja a dolgokat és elkezd SOAP-n keresztül XmlDocument-ekkel kommunikálni. Most említhetném egy V betűvel kezdődő cég O betűvel kezdődő csodálatos termékét, amely ezt műveli (az ott elkövetett - bár valószínűleg üzleti okok miatt - agysérült API-t ne is említsük), amely így működik.
--
Ui: ok, tudom, ez most nincs nagyon összeszedve jól, de most nem vagyok olyan hangulatban, hogy mindent összeszedjek rendesen. Sry érte.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
Meg mielott barki is felreertene(lehet mar keso :)) nem a Delphi vcl vagy a WinForms ellen irok. Inkabb az ellen, hogy a wpf nem eleg jo.
"Kulon van a megjelenites a kodtol. "
Azzal, hogy definiálok XML-ben egy felületet és ahhoz hozzáreszelek még kódot - mert előbb-utóbb előjön az, hogy van kód, ami igazából a megjelenítéshez tartozik - akkor jön egyeseknél a fejvakarás.
Ez csak egy pelda volt, lehetne emliteni meg parat:
-Egy grafikus anelkul tud valtoztatni a feluleten, hogy kod is valtozna. (Lasd Expression Blend/Sketchflow.)
-Nem csak ui tervezesre/kivitelezesre jo, ha jobban megnezed maga a XAML egy alltalanos framework amivel egy objektum fat fel tudsz epiteni. Ha jol emlekszem a WWF(Windows Workflow Foundation) is ezt hasznalja, es barki hasznalhatja, hiszen lehet dinamikusan betolteni xaml fileokat(Ahogy a VS 2010 is teszi, hogy atszabhasd a [url=http://msdn.microsoft.com/en-us/library/aa991992(VS.100).aspx]Start Page-et[/url].).
-Nyelv fuggetlen.
-Mivel sima xml, konnyu hozza toolokat/editort irni. Vagy legalabbis konyebb mint pl. delphi-hez. :)
-Es igy tovabb.
Plusz, ami viszont nem teljesen xaml feature: Veszett gyorsan lehet sajat komponenseket irni. Sokat programoztam Delphi-ben, maig nagy kedvenc, de sajat komponenseket nem csinaltam benne igy nincs osszehasonlitasi alapom. De azt tudom, hogy wpf-ben nagyon konnyu es egyszeru(persze azert az elso nap mindenfele hattertudas nelkul nem ennek kezd/kezdjen neki az ember!). Es sokszor nincs is szukseg uj komponens irasara, mivel eleg jo styling/templating rendszere van a wpf-nek.
Erről eszembe jut most az, amikor az MS által kiadott WPF-s ribbon demót próbáltam átrakni egy saját projektbe. Nah, ott is volt kopipaszta módszerrel átmásolt néhányszáz sornyi XAML kód, ami szinte "csak úgy kellett". Ahhoz képest egy 3rd party Delphis, kattintgatós komponens maga a megváltás volt.
Probald meg azokat a komponenseket ugy szemelyre szabni, mint ahogy wpf-ben lehet, aztan rogton nem is lesz olyan egyszeru az egesz. ;) Pl. ha jol emlekszem Delphi-ben van TButton, meg TImageButton. De mi van, ha mondjuk ket kepet akarsz a gombra, vagy azt akarod, hogy bizonyos esemenyekre(eventekre, vagy akar egy-vagy tobb feltetel teljesulesekor) mas-mas kep legyen rajta? Ezeket wpf-ben trivialis megoldani(par sor). Egy tetszoleges control resource-ebe pl betehetsz egy Style-t, amivel egyes controllok default property-jet allitja at, innentol kezdve a hierarchiaban minden olyan control megkapja azt a style-t.(Pl. app.xaml-ba beteszed, hogy a TextBlock szovege kek szinu legyen, es 16-os betumeret. Innentol kezdve, az egesz alkalmazasodban a TextBlock-okra ez lesz a default.)
Abban viszont igazad van, hogy itt is lehet eleg hosszura sikerult dolgokat alkotni, viszont itt akar tobb ezer sort is atrakhatsz egy kulon xaml resource file-ba anelkul hogy az editor megzavarodna tole. Abban a ribbon demo-ban levo "csak ugy kellett" kodot szepen, igenyesen szet lehet szervezni kulonbozo logika alapjan kulonbozo helyekre(valoszinuleg a demo-nak nem ennek a demonstralasa volt a celja).
Áh, ha 10-20 évvel régebb óta űzném az ipart, akkor lehet jobban hisztiznék emiatt. Most csak szimplán nem látom azt a mindent beragyogó fényes üstököst, ami miatt annyira jó lenne a régebbi technológiákhoz képest. Főleg, hogy valahol arra van ráépítve az egész.*
Nem celom elhitetni, hogy ez a szent gral, de nem is rosszabb mint a tobbi.
Ui: ok, tudom, ez most nincs nagyon összeszedve jól, de most nem vagyok olyan hangulatban, hogy mindent összeszedjek rendesen. Sry érte.
En is irhatnek jobb peldakat mint a 16-os meretu kek szinu TextBlock. :)
- A hozzászóláshoz be kell jelentkezni
Két dologra reagálnék: egyik a Delphi-s komponensgyártás. Szvsz egy hanyányival volt csak bonyolultabb, mint WinForms alatt. Ha jól emlékszem, új komponenst kellett létrehozni és azzal volt célszerű létrehozni, mert akkor megjelent a toolbaron is. És asszem ebből lehetett még egy package-t készíteni, amivel hordozhatóvá lehetett tenni a dolgot projektek között. De a lényegi része kb. ua. (Erősen FIXME, ezer éve nem csináltam saját controlt).
Az áttémázás részébe meg most nem mennék bele, mert nincs vele tapasztalatom, legfeljebb annyi, hogy egy-két ismerőst hallottam már szidni, hogy kb. pont ez az áttémázós része nem tehető meg egyszerűen, főleg, ha 3rd party komponensek* is vannak benne, hiába ezt emelik ki a legnagyobb előnyének a platformnak.
* Ok, ez nem feltétlen az MS hibája.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
Hat, sajnos az ellen nem ved. :)
De, ugylatszik tenyleg nem volt a legjobb a peldam. A Style-okkal nem igazan a temazasra probaltam utalni(habar igaz, hogy az jut eszebe rola eloszor az embernek), hanem inkabb arra, hogy az egesz wpf majdnem olyan mint egy legorendszer. Egy-egy reszet kicserelheted, modosithatod a style/template/trigger rendszerrel anelkul hogy uj komponenst kellene keszitened. Itt van nehany pelda(A 'Remember Moderation' reszt ajanlanam sok alkalmazas-fejlesztonek wpf-tol fuggetlenul. :)).
- A hozzászóláshoz be kell jelentkezni
"Nem olyan rég, kaptam valakitől egy kritikát, hogy mégis mit csinálok, mi a fenéért rakom bele a metódusokat egy adatosztály belsejébe?! Merthogy azt úgy kellene, hogy készítek egy osztályt, amiben csak adattagok vannak (+ a hozzájuk tartozó setter/getter -- autopropertyvel ez ugye egyszerű meg gyors is lesz) és egy külön osztályba kellene kiszerveznem azokat a metódusokat, amelyek dolgoznak az objektumon, merthogy ez mostanság így szokás"
És mi a helyzet az osztályinvariánsokkal? Le vannak tojva?
KisKresz
- A hozzászóláshoz be kell jelentkezni
Kifejtenéd, kérlek?
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
Erre én is kiváncsi lennék!
- A hozzászóláshoz be kell jelentkezni
Inkább visszavonom. :-) Azóta kitaláltam, hogy mire gondolhatott.
KisKresz
- A hozzászóláshoz be kell jelentkezni
Ettol fuggetlenul tenyleg erdekelne, hogy mire gondoltal.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
Először úgy értettem, hogy public getter/settereket képzelt el, amikkel gyakorlatilag tetszés szerint írhatóak az adattagok.
Most úgy gondolom, hogy settereken azokat az alapfukciókat érti, amiknek valóban hozzá kell férnie a private adattagokhoz, minden mást viszont kipakol egy külső osztályba.
KisKresz
- A hozzászóláshoz be kell jelentkezni
Akkor szerintem megint félreértesz:
Lényeg, hogy adott pl. egy osztály, ami valami szimuláció része. (Legyen mondjuk egy World osztályunk, ami tartalmazza a szimuláció teljes világát) Ebben az osztályban csak setterek/getterek vannak az adattagokhoz + validáció, stb.
Aztán tfh. van egy Tick() metódus, ami egy iterációt végez a szimulációból. Nah, ezt és az ehhez tartozó metódusokat gondolta a jóember kiszervezni külön osztályba.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni
En mar kimaradtam ebbol a WPF-bol, igy lenne egy kerdesem. A tapasztalat azt mutatja hogy elobb utobb kelleni fog dinamikusan valtoztatni a ui layoutot, amihez kod kell. Ha ez elvalik a statikus leirotol, akkor kar volt az egeszbe belekezdeni, mert a fele itt, a masik fele ott lesz. En meg nem lattam olyan megoldast, ami vegul ne egy programnyelv ujrafeltalalasahoz vezetett volna (pl. html -> javascript). De lehet hogy komplett hulyeseget beszelek. Hogy van ez? Valoban megeri a primitiv iskolapeldakon kivul az ilyen buveszkedes?
- A hozzászóláshoz be kell jelentkezni
És ha már szóba került az OOP is, arról is ejtsünk már pár szót. Nem olyan rég, kaptam valakitől egy kritikát, hogy mégis mit csinálok, mi a fenéért rakom bele a metódusokat egy adatosztály belsejébe?! Merthogy azt úgy kellene, hogy készítek egy osztályt, amiben csak adattagok vannak (+ a hozzájuk tartozó setter/getter -- autopropertyvel ez ugye egyszerű meg gyors is lesz) és egy külön osztályba kellene kiszerveznem azokat a metódusokat, amelyek dolgoznak az objektumon, merthogy ez mostanság így szokás, meg így lesz csudaenterspájz és a többi.
Hogy a C++ fomestert idezzem igaz jopar ev tavlatabol es nem is enterspajzra hivatkozva mondta
>> Ha egy osztaly adattagja alithato settel es olvashato get-tel, akkor semmi ertelme nem publikus adattagkent kezelni. Ha egy osztaly (class) minden eleme publikus akkor az struct.
Hogy oszinte legyek sosem ertettem a javaban ezt a set/get mizeriat. Vegulis az egy erv, bar nem tul eros, hogy az osztaly API valtozasa nelkul tudja az ember megvaltoztanti a set/get implementaciojat, de erre nekem a ruby megoldasa tetszik a legjobban. Az osztalynak kezdetben van egy publikus adattagja, ami elerheto object.member neven es allithato object.member = modon. set/get fuggvenyekre nincs szukseg. Ez utan ha megis kell moge kod, a set/get fuggvenyek definialhatoak ugy, hogy az API nem valtozik ie a set tagfuggveny neve member=().
- A hozzászóláshoz be kell jelentkezni
"Ha egy osztaly adattagja alithato settel es olvashato get-tel, akkor semmi ertelme nem publikus adattagkent kezelni."
Ez termeszetesen nem igaz, mert a settet getter nem feltetlenul csak annyit fog csinalni hogy value = X;
A ruby megoldas valoban elegansabb, mert leveszi a valladrol az irogatast. Java elegge el van maradva ilyen ugyekben, mas teruleten is. De majd a Java 7-ben, 2032-ben! :-)
- A hozzászóláshoz be kell jelentkezni
+1 :)
bar en nem szeretem a rubyt, de teny, hogy nem is ismerem annyira.
- A hozzászóláshoz be kell jelentkezni
Nah, neked is sikerült a lényeget kiragadnod a mondandómból. :) Nem a propertykről lenne szó, hanem, az osztályhoz tartozó metódusokról, ill. azok kiszervezéséről.
Na de hogy a hozzászólásodra válaszoljak: C++ és Java-val az a gond, hogy nincs nyelvi szinten property (MSVC++-t most picit hagyjuk), legalábbis olyan szinten, mint C#-ban.
Másrészt annak önmagában valóban nincs értelme, hogy csak úgy, mindenhez odategyünk +1 set/get metódust. Viszont tegyük fel, hogy szeretnénk validálni és értesülni, hogy az változott valami.
public event EventHandler PrecentChanged;
private int _precent;
public int Precent
{
get
{
return _precent;
}
set
{
if (value < 0 || value > 100)
{
throw new Exception("Valami nem ok");
}
_precent = value;
if (PrecentChanged != null)
{
PrecentChanged(this, new EventArgs());
}
}
}
Továbbá C#-s propertyknél további érv a megkülönböztetés mellett, hogy nem ritka, hogy egy program refactoringot használ. Pl. WinForms-os programban elérhető a VS saját property editora, mint komponens. Ennek tetszőleges object-t át lehet adni és automatikusan kikeresi a propertyket. Persze, lehetne setBizbaz() függvényeket is keresni (Javanal külön öröm az is/get, saját PHP-s rendszerünkben hasonló esetre pont ezért használunk kizárólag "get_" -t). Szóval leginkább szemantikai jelentősége van.
Persze, ehhez hozzátartozik az adatrejtés elve is.
Ráadásul ne úgy gondolj a propertykre, mint set/get páros egy adattaghoz. Pl. fa esetén root node. Tfh. nincs tárolva külön.
public Node Parent { get; set; }
public Node RootNode
{
get
{
return (this.Parent != null)
? this.Parent
: this;
}
}
Egyébként C# 3.0-tól pont erre vannak az auto propertyk .NET-ben (ld. előző példában a Parent-t), hogy ne kelljen ennyi felesleges kódot beletúrni (Vagy Java-hoz pl. a Project Lombok).
Na meg adhat néhány kényelmi funkciót, mint az indexerek.
A +1 metódushívással sem kell annyit foglalkozni, mint régen, gyakorlatilag minden fordító/JIT csuklóból optimalizálja az ilyeneket. Rubys megoldás meg szintén nem teljesen újkeletű, Delphiben is volt már hasonló:
intefrace
type
TValami = class
private
afoo : Integer
procedure SetFoo(pfoo: Integer);
public
property Foo : Integer read afoo write SetFoo;
end;
implementation
procedure TValami.Foo(pfoo: Integer)
begin
if pfoo >= 0 and pfoo <= 100 then begin
afoo := pfoo;
end;
end;
end.
Persze, ahogy jönnek új nyelvek, úgy lesznek ezek egyre kevésbé nyögve nyelősek.
----------------
Lvl86 Troll
- A hozzászóláshoz be kell jelentkezni