2012. július 1., vasárnap

Bemelegítés #3

A bemelegítő posztsorozat utolsó felvonása, amelyben CodeNinja végre megeszi a borítóképen látható kódot. Ki hitte volna, hogy háromfogásos menünek bizonyul?

Emlékeztetőül a borítóképen látható kódrészletről beszélünk, és az első sor végéig jutottam a múltkori poszttal:
    
    public class CodeNinja : Warrior, ICoder
    {
        static private Color _color;
        static private Visibility _visibility;
 
        public Int32 Level { get; set; }
 
        static CodeNinja()
        {
            _color = Color.Black;
            _visibility = Visibility.Hidden;
        }
 
        public static CodeNinja CreateCodeNinja(Int32 level)
        {
            var ninja = new CodeNinja { Level = level };
            return ninja;
        }
    }

Az ominózus első sor után egy { (nyitó kapcsos zárójel áll). Ez a C#-ban a blokk nyitó jel, a blokkzáró - talán kitalálható - a záró a } (záró kapcsos zárójel) lesz. Ismerek olyanokat, akik szerint ennyi információ elég is egy programnyelv jóságának eldöntéséhez. Ez egy erősen fundamentalista  szemlélet, amihez nyilvánvaló C# rajongásom ellenére sem szívesen csatlakoznék. Inkább adnék egy útravalót a kódblokkokkal kapcsolatban. 
Mindig ki kell tenni a blokk határolókat, akkor is ha a szintaktika ezt nem követelné meg feltétlenül az adott helyen. Ez bőségesen megtérül majd, amikor egy utólagos kódmódosításkor logikai hibát vétenénk, mert tévesen értelmeznénk az egzaktul nem jelzett a kódhatárokat egy bonyolultabb vezérlési szekvencián belül. Szerencsére a Visual Studio különféle kódkiegészítő szolgáltatásai ebbe az irányba presszionálnak, hiszen kiteszik a blokkhatárolókat, és remélhetőleg nem akad oly elvetemült önsorsrontó, aki képes őket kitörölni... :-)
A két zárójel közt van maga az osztályunk. Először két privát tagváltozó, deklarációja következik:
    
        static private Color _color;
        static private Visibility _visibility;

A Color típusú _color és a Visibility típusú _visibility. A private egy hozzáférés módosító, amit az osztály kapcsán már kiveséztem. De itt ugyebár a tagra vonatkozik, és azt jelenti, hogy ezek a tagok csak a CodeNinja  osztály belsejében láthatók. Mivel a private egyben az alapértelmezett hozzáférés módosító az osztály tagjaira, ezért ha nem írtuk volna ki, akkor is ugyanazt jelentené. Én azonban mindig kiírom a hozzáférés módosítókat. Első ránézésre talán nincs sok értelme, de így olvasásánál majd arcon sikítja a résztvevőket. Az meg sosem árt, ha az ember órák óta a kódban bolyong.
De a private előtt ott van még egy  kulcsszó: static. Amikor egy osztályt példányosítunk, akkor létrejön az adott egyedet jelképező példány, erre az egyedre jellemző értékekkel az adattagokban. Azonban egy típusnak lehetnek olyan tulajdonságai is, amelyek nem egy adott egyedre vonatkoznak, hanem az összes ilyen típusú egyed esetében közös értéket vesznek fel. Na, pontosan erre használjuk a statikus adattagokat. Ezekből egyetlen közös példány lesz, amely az adott típusé, és az összes példány ezt használja.
Mivel senki nem jelentkezett a múltkori poszt után a leleplezéssel (talán a jutalom volt hihetetlen), ezért lelövöm én a poént. Itt van az a csúnya eltérés a Microsoftos kódolási konvencióktól. Mert a private tagokat egyszerűen camel case írjuk, és nem használunk prefixet. Ellenben a kódban minden private tag hivatkozásakor kiírjuk a this szócskát. Ez a  C#-ban mindig az adott kontextusban aktuális osztály példányát hivatkozza. Az aláhúzás egy korábbi konvenció maradványa, de benne van a kezemben még, és nem volt kedvem újra photoshopolni a képet.

A következő sor:
     
        public Int32 Level { get; set; }

Az objektum orientált programozásban az egységbezárás nevű alapelv egyik legfontosabb pilléreként tekintsünk erre a sorra. A háttérben megbújó lényeg, hogy egy osztály adattagjait sosem érjük el közvetlenül az osztályon kívülről (információ rejtés). Azokkal az adatokkal amik a külvilágra tartoznak, speciálisan járunk el, deklarálunk melléjük egy publikus láthatóságú field-et, amit property (tulajdonság) néven szokás illetni. Így írnánk ezt C#-ul:
     
        private int level;
        public int Level
        {
            get { return this.level; }
            set { this.level = value; }
        }

A level a privát adattag, a Level a property, amihez két különös metódus tartozik a setter és a getter. Ezek most csak az értéket közvetítik level felé, de persze ennél bonyolultabbak is lehetnének.
Csakhogy a C# 3.0 óta ilyet ember nem ír le. Azóta létezik ugyanis a rövidebb konstrukció, az úgynevezett automatikusan megvalósított tulajdonságok (Auto-Implemented Properties). Ez pedig pontosan azt eredményezi, amit a második hosszabb kód.
Még egy apróság: az int ugye ugyanaz mint az Int32. Bátran használjuk a C# beépített típusait, aki nem emlékezne kapásból, hogy mi mit jelent, annak itt egy táblázat.

Ami ezután következik, azt úgy hívják, hogy statikus konstruktor:
    
        static CodeNinja()
        {
            _color = Color.Black;
            _visibility = Visibility.Hidden;
        }

A statikus konstruktor egy nagyon érdekes lakója az objektum orientált állatkertnek. A konstruktor ugye az objektumok példányosításakor jut szerephez (egy új példány létrehozásakor fut), és lényegében a példány inicializálásáért felel. Az imént már szóltam pár szót a statikus adattagokról, melyek nem példányhoz, hanem a típushoz kötődnek. Ezek beállításáért a statikus konstruktor felel, amellyel kapcsolatban joggal vetődik fel a kérdés, hogy ez mikor fog meghívódni. Nos, vagy a típus első példányosítása előtt vagy mikor először hivatkozunk egy statikus tagot, hiszen ehhez nem kell példányosítanunk.
Tehát a fenti kód beállítja a CodeNinja típus közös tulajdonságaként, hogy a _color jellemző black legyen, míg a _visibility hidden. Ami minden CodeNinja példányra vonatkozni fog és éppen megfelel egy nindzsának.

Már csak egyetlen részlet maradt. Ez a pár sor itt:
    
        public static CodeNinja CreateCodeNinja(Int32 level)
        {
            var ninja = new CodeNinja { Level = level };
            return ninja;
        }

Ezt itt egy statikus metódus, tehát az osztály példányosítása nélkül is meghívhatjuk. Public, tehát ezt bárhonnan megtehetjük. Amúgy pedig egyfajta gyártó függvény (Factory Method), csak nincs külön osztályba csomagolva. A gyártó függvény egy igen ismert programtervezési minta (Design Pattern). A tervezési mintákról most csak annyit, hogy a programozás egy magasabb szintjét képviselik. Tökéletesen el lehet programozgatni anélkül is, hogy halvány fogalmad lenne bármely pattern-ről. Bár az azért egy szint után felvetődhet, hogy minek?
A fenti függvény nem csinál mást, mint kreál egy kódnindzsa példányt. És visszaadja azt. Egy valamire való gyártó függvénynek paraméterben meg szokás kapnia azokat az értékeket, amelyek egy példány inicilizálásához szükségeltetnek, esetünkben ez most az egy szem Level tulajdonságban kimerül.
A példányosítás a new operátorral történik, a mögötte látható formulát (a kapcsos zárójel, és ami benne van) úgy hívják, hogy objektum inicializáló (Object Initializer). Itt felsorolhatjuk azokat a tagokat, amelyeket inicializálni kívánunk, és megadhatjuk, az értéket, amit kapjanak. Ha valaki erről az előbb emlegetett gyártó függvény inicializáló képességére asszociálna, akkor teljes joggal teszi. Szép példája, ahogy egyes pattern-ek, vagy azok alapjait adó elgondolások a nyelvi elemeken keresztül beépülnek a C#-ba. Szerencsére a Microsoft a teljes fejlesztői keresztmetszetén erőlteti a minták használatát, megvalósítását, beépülését a fejlesztési folyamatokba. Amely egy igen dicséretes törekvés, Isten tartsa meg jó szokásukat.
Ezzel végére is értünk a bemelegítésnek. Innentől jöhetnek a komoly posztok... :-)

2012. június 17., vasárnap

Bemelegítés #2

A bemelegítő poszt folytatása, melyben CodeNinja úszik egyet a C# kódóceánban, a borítóképen látható kód kapcsán, aztán annak vizét borzas szőrű, nagytestű kutya módjára a nagyérdeműre rázza. De valójában nem jut túl az első soron.

Akkor nyisson egy vallomás: eredetileg úgy gondoltam, hogy egy poszttal elintézem a borítóképet bemelegítés címén, hiszen majdnem semmi ami rajta van. Abba a kemény tíz sor kódba azonban annyira belebonyolódtam, hogy a poszt csak hízott és hízott. Ezért egyszerűen elvágtam a bejegyzést a kód előtt. Az első felét már olvashattátok. 

Jöjjön hát a főfogás: a kód! Aki idáig olvasott azt valószínűleg érdekli is, szóval bele merek vágni, leszek ennyire szakbarbár, végül is ezért vagyunk itt:
    public class CodeNinja : Warrior, ICoder
    {
        static private Color _color;
        static private Visibility _visibility;
 
        public Int32 Level { get; set; }
 
        static CodeNinja()
        {
            _color = Color.Black;
            _visibility = Visibility.Hidden;
        }
 
        public static CodeNinja CreateCodeNinja(Int32 level)
        {
            var ninja = new CodeNinja { Level = level };
            return ninja;
        }
    }

Ez itt ugye egy osztály deklarációja. Az osztály fogalmát eszem ágában sincs itt kivesézni, aki nem foglalkozott még komolyabb szinten programozással, az nézzen rá erre a magyar nyelvű Wiki szócikkre.
Ez körülír alapfogalmakat, de igazából csak azért hasznos, mert az első bekezdéstől talán még egy laikusnak is az az érzése támadhat, hogy érti az osztály fogalmát. Ez pedig alapvetően egy helyes attitűd egy OOP-programozótól. Csak arra kell vigyáznia, hogy munkája során mindig úgy érezze, még a legbonyolultabb OOP mintákat nézegetve is (ha már idáig jutott), hogy érti ezt az egészet. Ez pedig rengeteg tanulást, utánaolvasást, sőt kísérletezgetést/kipróbálást fog igényelni,  hiszen az OOP (Object-Oriented Programming - Objektum Orientált Programozás), és az OOD (Object-Oriented Design - Objektum Orientált Tervezés) nagyon komoly és szerteágazó tudományágak, melyeknek gyökerei legalább a 1960-as évekig nyúlnak vissza. És mint oly sok minden az IT szektorban, az OOP születése is a MIT szellemi műhelyeihez köthető.
Ráadásul, mint minden kurrens dolog az informatika területén, az objektum orientált programozás is evolúció alatt áll, melynek aktív ágai is igen nagy számban léteznek, ezek közül az egyik legjelentősebb a .NET/C# vonal.
Így sem egy blog-bejegyzés, sem egy Wiki-szócikk nem lehet képes rá - már csak a  terjedelmi korlátok miatt sem - hogy átfogó képet adjon az OOP miben létéről. 

Azonban, mivel ez az első komolyabb poszt, amiben azt tűztem ki célul, hogy megmagyarázom azt a pár sor kódot. Mégpedig oly módon, hogy azok az érdeklődök is láthassák, akiktől távolabb áll a programozás, hogy a programozás messze több érthetetlen sorok egymás után dobálásánál. Ez egy komoly elméleti, és konkrét gyakorlati tudásra felépíthető tudatos tevékenység. Minden arcoskodás nélkül: napjaink egyik legprosperálóbb gyakorlati-tudományága. Ezért belemegyek legalább bizonyos részletekbe.

A kódra visszakanyarodva, az első sor azt mondja, hogy itt egy osztály (class) vagy más néven típus (type), esetleg objektum (object) deklarációja jön (ezt C#-ban a class kulcsszó jelenti), az osztály neve pedig CodeNinja.
A class kulcsszó elé írt public szócskát úgy hívják, hogy hozzáférés módosító (Access specifier, avagy Access modifier). A hozzáférés módosítóknak közvetve az egységbezárás (Encapsulation) nevű OOP-alapelv vonatkozásában van fontos szerepük: azt határozzák meg, hogy az osztályunk honnan látható. Valójában a hozzáférés módosítók nem csak magukra a típusokra, de a típusunk minden egyes tagjára (adat tagok és metódusok) is vonatkozhatnak. C#-ban a private, public, protected, internal és a protected internal módosítókkal láthatjuk el az osztályokat. Hogy mi mit jelent az osztályokra vonatkozóan abban ez az MSDN oldal tökéletesen útbaigazít.
A public itt kb. annyit tesz, hogy a CodeNinja osztály szabadon elérhető, felhasználható bárhonnan, a hozzáférése nincs korlátozva. Ha ezt akarjuk a CodeNinja osztállyal tenni, akkor ki kell írnunk elé a szócskát, mert C#-ban az alapértelmezett hozzáférés módosító az osztályokra a private, amely azt jelentené, hogy a CodeNinja csak a tartalmazó osztályból lenne elérhető. 
Gyakran ide veszik még (mármint a hozzáférés módosítókhoz) a new-t is. Ennek az oka az, hogy a C#-ban a new szócska nem csak a példányosítás operátora lehet, hanem használhatjuk arra is, hogy elrejtsük és felüldefiniáljuk a származtatás során az ősosztály tagjait: ekkor az ősosztály tagja a származtatott osztályban rejtve marad. Ennyiben valóban hozzáférést módosít a new módosító (new Modifier) és szerepét teljes körűen a származtatott osztályban deklarált tag veszi át. A new azonban nem számítható a klasszikus értelembe vett hozzáférés módosítók közé, és nem alkalmazható osztályokra (a citált MSDN oldalon sem említik), de sajnos nagyon gyakran emlegetik emezekkel egy felsorolásban, és jobb esetben megmagyarázzák, miről van szó vele kapcsolatban.
(A C#-ban a new-nak van még egy harmadik jelentése is, aki beírja kommentbe, hogy mi, az kap egy virtuális buksisimogatást érte. Vajon ez elegendő motiváció?)
Na az első három szóval meg is vagyok:
"Sajnos" a CodeNinja mögött áll egy kettős pont. Ez azt jelenti, hogy itt most  megadjuk a CodeNinja közvetlen ősét (Base class), vagy felsoroljuk azokat az interfészeket (Interface), amelyeket az osztály megvalósít (implementál). Vagy akár mind a kettőt megtesszük egyszerre, mint ahogy a CodeNinja esetében is.
Az egyes szám használata az ősosztály vonatkozásában nem véletlen. A C# ugyanis nem ismeri a többszörös származtatásnak nevezett konstrukciót, amikor egy osztálynak több közvetlen őse is lehet. Ez nekem személy szerint egyáltalán nem hiányzik belőle, és legnagyobb érdeme talán az eme tulajdonságának, hogy az interfész-alapú programozás felé presszionálja az értő közönséget. Ami nem egy haszontalan elképzelés, nem csak azért, mert interfészből viszont annyit felsorolhatunk, amennyit csak akarunk, hanem mert az interfész alapú programozás gondolata igen hasznosnak bizonyulhat majd.
Egy osztály tehát tetszőleges számú interfészt implementálhat. Fontos megjegyezni, hogy a C# - nagyon helyesen - a részleges interfész-implementáció kétes intézményét sem ismeri, tehát ha egy interfészt felsorolunk akkor azt meg is kell maradéktalanul valósítanunk az adott osztályban.
A szintaktikáról annyit, hogy ha adunk meg alaposztályt (Base class), akkor ennek közvetlen a kettőspont után kell állnia, és utána következhetnek az interfészek, mindent vessző választ el egymástól a felsorolásban. Tehát a CodeNinja a Warrior osztályból származik (örökli a Warrior minden tulajdonságát), és megvalósítja az ICoder interfészt.
Egyébként, ha nem írjuk ki a közvetlen őst, akkor az olyan, mintha azt írnánk: Object. Az Object egy különleges osztály neve, ez minden osztály ősanyja. Közvetlenül, vagy közvetve ebből származik minden referencia típus.

Az ICoder nem véletlenül kezdődik I-vel, ugyanis a programozásban van egy olyan fogalom, hogy kódolási konvenció (Coding convention). Ez olyan a szintaktika fölött elhelyezkedő,  egyezményes szabályok (konvenciók) gyűjteményét jelenti, amelyeket ha nem tartasz be, attól még írhatsz olyan kódot, amely tökéletesen működőképes, csak megnehezíted jobb esetben csak a magad, rosszabban meg mások munkáját.
Természetesen a Microsoftnak van saját kódolási konvenciója a .NET, illetve a C# vonatkozásában, amivel erősen ajánlott megismerkedni mondjuk ezen az MSDN oldalon elindulva. Akinek ez sok lenne annak itt egy kivonatos leírás Brad Abrams blogjából, de azért is célszerű a hivatalos MSDN-t nézni, mert a kódolási konvenció is evolúció alatt van, és az MSDN-t up-to-date tartják, míg Brad 2005-ös bejegyzését - ha jól látom - nem frissíti. Ha az MSDN-en eljutunk az elnevezési konvenciókkal foglalkozó részig (Guidelines for Names), akkor itt az osztályok, struktúrák, interfészek elnevezésével foglalkozó rész felé kell továbbhaladni, ahol megtaláljuk az utasítást arra vonatkozóan hogy az interfészek neve egyrészt "Pascal case" íródik , másrészt "I" prefixxel kezdjük ("Do prefix interface names with the letter I to indicate that the type is an interface.").
Mit jelent ez? Annyit, ha .NET/C# programozó vagy akkor  I prefixxel kezded az interfészek neveit. Nem akkor, ha egyetértesz vele, vagy ha épp kedved van hozzá, hanem azzal kezded és pont. Így ha egy másik C# programozó ránéz majd a kódodra rögtön tudja, hogy az elnevezés egy interfészt takar. A kódolási konvenciókat elsősorban azért kell betartani, mert arra hivatottak, hogy legyen egy közös nyelv amelyet a közösség beszél, amely segít a kód olvasásában, és olvasás utáni értelmezésében (lehet ez maga az olvasás :-) ). Továbbá nem utolsó sorban azért, mert ezeket a szabályokat talán nálad okosabb emberek találták ki, akik sokat gondolkodtak azon, hogy miért így, vagy úgy legyen valami, még ha elsőre önkényesnek is tűnhetnek ezek a szabályok, amihez hasonlót akár Te is ki tudsz találni.
Ezzel együtt a kódolási konvenció nem szentírás, ha meg tudod indokolni, ha úgy érzi egy csapat hogy valami jobb lesz nekik, ha változtatnak, akkor eltérhetnek tőle, de minél inkább a C# fejlesztői-közösség része akarsz lenni, minél szélesebb rétegnek szánod a kódodat, annál inkább bele kell simulnod majd a hivatalos konvencióba.
A kódolási konvenciók sok részének a használata egyszerűen szint kérdése. Ha hobbiból programot írogatsz: mindegy. Ha eljutottál, arra a szintre hogy használj egy konvenciót, mert megérted, miért fontos, akkor úgyis használni fogod. Ennek ellenére minden kezdőnek azt javaslom, hogy ismerje meg már az elején, és használja a hivatalos Microsoft-konvenciókat, ha nem kell más konvencióhoz alkalmazkodnia. Ezzel sokat segít magának is a programozás útvesztőin való későbbi barangolásai során, és a fillérre váltott gyakorlati haszna is meglesz. Ha előbb nem, akkor az első komolyabb állásinterjún, amin C#-kódot kell majd írni, vagy elemezni.
Egyébként a fenti kódban van egy (legalábbis én ennyiről tudok :-) ), a Microsoft-konvencióktól való durva eltérés, ha úgy tetszik egy hiba. Nem árulom el egyelőre, de várom a leleplező kommenteket.

Na most már tényleg meg vagyunk az első sorral, azt hiszem hihetetlen szakbarbár-intellektus szükségeltetne hozzá, hogy valami még eszünkbe jusson ezek után erről az 5 szóról, bár nyilván nem lehetetlen:


2012. június 14., csütörtök

Bemelegítés

Bemelegítő poszt a blog fejlécképéről, melyben CodeNinja belegabalyodik kicsit a szoftvertesztelés indáiba. Majd miután sikeresen lerázza őket magáról, azt a leheletnyi UML-t is megemlíti ott a jobb szélen. De a kódba végül nem merül alá...

Arra gondoltam, hogy bemelegítésnek kivesézném egy kicsit a fejlécben látható képet. Sok mindenről lehet beszélni rajta keresztül (lesz pár, amiről bizony fogok is), és ha netán nincs mindenki annyira képben, a programozást, a Visual Studio-t vagy a C#-ot illetően, akkor közelebb kerülhet hozzá ez a kép itt fent. Az pedig nem árt, mert ezt fogja a kedves látogató nézni ezután, ha már annyit photoshopoltam miatta, mint eddigi életemben összesen.

Nos, a kép bal oldalát (az ESC-es oldal ;-) ) egy szóval szoftver tesztelésként, esetleg szoftver minőségbiztosításként lehetne elintézni, ez egy olyan téma, ami elő fog még jönni nem egyszer, nem is kétszer, mert a teszt automatizmusnak (Test automation) és az egységtesztelésnek (Unit testing) megkerülhetetlen témának kell lennie minden programozással foglalkozó fórumon. Az ablak a képen pedig a ReSharper "Unit Test Sessions" ablaka, amely egy figyelemre méltó Visual Studio kiegészítő, érdemes követni a linket (a robotoknak elegánsan megtiltottam egy "nofollow" attribútummal, de mi ugye emberek vagyunk, szóval tessék klikkelni bátran), de a teszteléshez a háttérben az alapokat olyan MS eszközök adják, mint a Unit Testing Framework, amelyet a VS2005-től van szerencséje élvezni a nagyérdeműnek.   
ReSharper: Unit Test Sessions
A ReSharper Unit Test Sessions ablaka a Visual Studio-ban
 Az ablak azt mutatja éppen, hogy az összes tesztünk (mind a három :-)) sikeresen lefutott, tehát minden rendben a kódunkkal. Legalábbis, ha a teszt eseteink (Test Case) tisztességesen meg vannak írva/fogalmazva, és a tesztek kódlefedettsége (Code Coverage) is megfelelő (ebben az esetben egyik sem teljesül természetesen, mégis minden csupa zöld pipa, szóval nem olyan egyszerű ez...). De most akkor le is fejtem magamról ezeket az indákat, amikbe belekeveredtem a tesztelés kapcsán, és egyelőre nem hagyom, hogy berántsanak az szoftver tesztelés susnyásába. De csak egyelőre, azt gondolom ugyanis, hogy a teszt vezérelt fejlesztés (TDD - Test Driven Development) alapjait minden fejlesztőnek ismernie kéne.

A kódot elegánsan átugrom, de persze csak ideiglenesen, és jöjjön a jobb oldal (itt nincs ESC, ha minden igaz :-) ). 
UML diagram
UML Osztály (Class) diagram
Ez itt egy UML diagram, azon belül is egy osztály-diagram (Class-diagram) csak field-ek nélkül. Ne tessék tőle félni (mármint az UML-től, nem ettől a kis ábrától) az UML a barátunk, bár talán nem abban a komplex formában ahogy a RUP idején elképzelték az IBM-nél. Ezt a könyvet UML földi halandóknak - UML for mere mortals) tessék elolvasni. Azért is mert igazán "nagy koponyák" írták (Robert A. Maksimchuck, Eric J. Naiburg), akik annak a csapatnak az aktív tagjai voltak, melynek az emberiség az UML-t  köszönheti. Respect. Azért is mert rendkívül szimpatikus az a finom (ön)irónia, amit helyenként kifejezetten érzékeltetnek.
A diagram egyébként ennyit mond: van egy ICoder nevű interfész (Interface), amelyet a CodeNinja osztály (Class) megvalósít (implementál), amit a CodeNinja dobozán a kis kör jelez, ICoder felirattal. (Ez az interfész implementáció jele az UML-ben.) A CodeNinja, mint látható a Warrior absztrakt osztály leszármazottja, amit az innen kiinduló, és Warrior-ra mutató nyíl jelez. Emellett a Visual Studio diagram szerkesztője - ahonnan a kép származik - az osztály dobozán is feltünteti az ősosztályt (amit mondjuk könnyen megtesz, mert itt maximum egyetlen név fog állni, hiszen a C#-ban nincs többszörös objektumszármaztatás). Tehát ez itt egy származtatás (öröklés), amit a kevésbé értő érdeklődőknek röviden úgy magyaráznék meg, hogy pont azt jelenti, amire az elnevezésből gondolnánk. (Mily meglepő. :-) )
Hát ez maximum ennyi. Illetve, azt azért figyeljük meg, hogy szép! De tényleg, nem hülyéskedem. Engem az őrületbe kergetnek a szokásos Móricka-rajz stílusú diagramok:
Móricka UML diagramot rajzolt
És ezt nem a Paint-ben követte el valaki, hanem meglepően professzionális (és egyben érthetetlenül bonyolult, és kezelhetetlen), méregdrága modellező eszközök bírják magukból kicsiholni ezt a félelmetes grafikai teljesítményt. Persze tudom én, hogy ugyanaz, meg persze, én is szoktam felrakni skicceket papírra, vagy táblára kézzel. De könyörgök ezt egy program tette ide, a XXI. században. Szégyen. A Visual Studio UML diagramjai nem szépek, hanem gyönyörűek. És annyi van benne az UML-ből, olyan mélységgel, amit földi halandó használni fog. Ezzel kapcsolatban meg kell állapítanom, a redmondi srácok arányérzéke lenyűgözően működött, mikor arról döntöttek mennyire merészkedjenek mélyre az UML erdejében. Ennyit a jobb oldalról.

2012. június 6., szerda

Preambulum

Isten hozott Kedves Olvasó!

Ez itt egy magyar nyelven vezetett szakmai blog szeretne lenni, a programozásról és a programozás határterületeiről.
Ehhez a bejegyzéshez hozzáadtam egy csomó címkét tervezetten ezek köré fognak csoportosulni a témák. Sok mindennel fogok foglalkozni, ami kapcsolódik valamilyen módon a programozáshoz, kötetlenül, szabadon kószálok majd ezen az érdekes, felfedezésre váró területen. Azonban sem tananyagot, sem referenciát nem célja adni e blognak. Inkább afféle kedvcsináló szeretne lenni, hogy tessék bátran mélyre merülni e napjainkban meghatározó tudományban, és súlyának megfelelő módon és komolysággal kezelni a "dolgokat".

Időm közel semmi sincs rá, hogy vezessem, de ez egyáltalán nem töri le a lelkesedésem, a kedvem annál  nagyobb. :-) Meglátom majd, mi sül ki belőle, szeretnék rendszeresen jelentkezni, szerzőtárs jelöltjeim is akadnak, tehát nem kizárt, hogy bővül majd idővel a szerzők köre, hogy pörögjön a dolog.

Alapvetően MS eszközökről/technológiákról lesz szó, mert magam ezekkel dolgozom, ez a vonal érdekel. Mellesleg  pedig ezek az eszközök vitathatatlanul a legjobbak közt vannak, a velük való munka a "szoftveripari munkálkodás" mára talán legmagasabbra emelkedett csúcsa az ipar "gyűrt lánchegységének".  Ezen belül is elsősorban WEB-es, vagy WEB-es projektekben jól használható témákat érintek majd részletesebben. Ezen a területen meggyőződésem szerint épp most készül nagyot ugrani a redmondi szöcske, ha ugyan nem rugaszkodott már korábban neki, és most már repül a helyes irányba, igaz pár geller után, egy-egy felesleges testrészét elpotyogtatva.

Ami biztos nagyon hangsúlyos lesz még az az úgynevezett modern, vagy agilis szoftverfejlesztési elvek/módszertanok. Mivel ezek nem a semmiből jöttek van bőven lehetőség "történelemről" is beszélni a témában. Ez megint egy terület, ami önmagában is el tudna témával látni egy blogot. Bízom benne, hogy a rendelkezésemre álló szerény eszközökkel sokakat sikerül rávennem majd arra, hogy ápoljon velük minél szorosabb kapcsolatot. Mert ezek a dolgok valóban működnek...

Ennyit elöljáróban. Remélem, idővel rászolgál majd ez a kis blog a kedves publikum  megtisztelő figyelmére.