20.08.2010

SEMESTRÁLNÍ PRÁCE – SÍŤOVÉ KRESLENÍ


Na univerzitě nás učí programovat v jazyku Java - snaží se tento jazyk aplikovat do všech předmětů, které souvisí s programováním. Samozřejmě v předmětu „Úvod do jazyka C“ se Java neučí. Nicméně ve druhém ročníku je mezi povinně volitelnými předmět Programovací techniky jazyka Java. Tento předmět je určen pro studenty, kteří mají zájem o hlubší poznání tohoto jazyka a se základy programování nemají problém.

Zápočet z tohoto předmětu se skládal z vypracovaní semestrální práce (program) a následné obhájení této práce.

Zadání bylo prosté – mělo se jednat buď o síťovou aplikaci, aplikaci pracující s vlákny nebo aplikaci, které zpracovává a nějak vyhodnocuje XML dokument. Já jsem zvolil síťovou aplikaci. Mnou zadaný projekt nese název Síťové kreslení. Jedná se o jednoduchou aplikaci, která umožňuje kreslení základních geometrických tvarů po síti.

Popis funkčnosti

Aplikace je triviální – funguje na principu klient/server, tj. pouze dva účastníci. Komunikace probíhá pomocí příkazů, které určují, co se má nakreslit
obecný parametr:
TYP_OBRAZCE BARVA TLOUSTKA_STETCE PARAMETRY_KRESLENI[]

Aplikace umí posílat i obrázky, i když vykreslení trochu trvá – vykresluje po řádcích. Většina operací (kreslení, komunikace a posluchači) běží ve vláknech, samotná aplikace ale není na procesor moc náročná.

Jednotlivé třídy (architektura)

DemoApp – inicializuje panel a spouští celou aplikaci
DemoFrame – samotné okno aplikace obsahující menu a instanci plátna
Platno – kreslící plátno
Client – obstarává klientskou komunikaci (poslouchací vlákno)
Server – obstarává serverou část (poslouchací vlákno)
ConnectStatus - třida, která ví, zda se komunikuje, nekomunikuje nebo jestli se náhodou nedokomunikovalo :-)
CommandsCollection – Datová struktura, která přijímá a odebírá příkazy (synchronizovaná)
Algorithm – Obsahuje pomocné algoritmy kreslení (výpočet Lagrangeho polynomu, semínkové vyplňování a XOR režim kreslení)
DrawGeometry – statická třída, která umí kreslit jednotlivé útvary

V neposlední řadě tu je pak samotný balíček obsahující třídy jako Rect, Polygon, Line a další útvary. Tyto třídy ví, jaké parametry očekávat a jak z nich cílený útvar vytvořit.

Kódu je to kupa a divím se, že to vůbec funguje, nicméně započet i zkoušku mám.

Síťové kreslení

07.08.2010

PRÁCE S ŠABLONY VE WPF


Krátké seznámení s vytvářením šablon (template) ve Windows Presentation Foundation. V ukázce je vysvětlena aplikace šablony na tlačítko, vytvoření reakce na myš, následné zanimovaní a odsunutí šablony do statických zdrojů, pro případné další použití.

Odkazy: zdrojové kódy, video na mstv.cz


09.07.2010

ČEŠTINA PRO VISUAL STUDIO 2010 PROFESSIONAL


Byl uvolněn český jazykový balíček pro Visual Studio 2010. Tuto jazykovou sadu lze nainstalovat do VS2010, ovšem do verze Professional, popř.  vyšší. Do edice express zatím není možné tuto sadu nainstalovat, pravděpodobně je to dáno tím, že express edice nepodporuje zásuvné moduly. 
Pokud si češtinu nainstalujete, nemusíte se bát, že přijdete o anglickou lokalizaci – je možno mezi oběma jazyky velmi snadno přepínat, bez nutnosti restartovat celý program.

Přepínání jazyků: 
Tools (Nástroje) -> Options (Možnosti) -> Environment (Prostředí) -> International Settings (Mezinárodní nastavení) -> nabídka Language (Jazyk)

Stahovat češtinu, popřípadě získat více informací, můžete na tomto linku.

03.07.2010

GENERICKÝ VZOR SINGLETON


Byl mi položen dotaz, zda lze vytvořit takový model vzoru Singleton, který půjde použít i jinde, resp. pro jiný typ. Singleton je ale takový vzor, který může mít právě jednu instanci pro celý program – obecně by měl figurovat pouze jednou. Jak tady udělat nějaký znovupoužitelný Singleton v jednom programu? Na tuto otázku si lze odpověď celkem jednoduše – použijeme generické typy jazyka C#.NET.

class Singleton where T : new()
{
    private Singleton() { }

    static class vytvoreniJedinacka
    {
        internal static readonly T instance = new T();
    }

    public static T Instance
    {
        get
        {
            return vytvoreniJedinacka.instance;
        }
    }
}

Na ověření, zda všechno funguje tak jak má, je zde přirpravena krátká testovací metoda. Zkusíme udělat více instancí a pak dva stejné typy porovnat. Pokud se budou rovnat - můžeme říct, že to šlape dobře.

class Program
{
    class Osoba { }

    static void Main(string[] args)
    {
        Double d1 = Singleton<Double>.Instance;
        Int16 i = Singleton<Int16>.Instance;
        Double d2 = Singleton<Double>.Instance;
        Osoba o = Singleton<Osoba>.Instance;

        if (d1 == d2)
        {
            Console.WriteLine("Jsou to stejné instance");
        }

        Console.ReadKey();

    }
}

Z výsledku vidíme, že lze vytvořit i generický Singleton, který umí vytvářet unikátní instanci vždy pro zadaný typ.

30.06.2010

NÁVRHOVÝ VZOR PROTOTYP (PROTOTYPE)


Dalším návrhovým vzorem, po boku vzoru Singleton, je Prototyp, který také spadá do kategorie vytvářejících vzorů, tedy creational design patterns.

Pokud máme složitou inicializaci objektů, tedy dlouhý strojový čas provedení inicializace - vyplatí se objekty od sebe navzájem kopírovat, tedy vytvářet klony. Právě na této myšlence je postaven Prototyp. Mějme například nějaký vytvořený objekt, a pokud chceme vytvořit další instanci stejné typu => první si naklonujeme. Tím obejdeme další inicializaci. Výhody klonování jsou nesčetné, můžeme například vytáhnout data z kolekce jako kopii a dále s touto kopií pracovat a měnit ji, aniž bychom měnili hodnoty v jiné části programu.

Implementace Prototypu v jazyce C#.NET

Klování se provádí za pomoci implementace rozhraní ICloneable, které nám implementuje jednu metodu - Clone(), která je bezparametrická a vrací nám obecný objekt (nejedná se tedy o generické rozhraní). Metoda je typu public a může být volána jen v rámci třídy nebo z modulu, který danou třídu obsahuje.

Možností implementace metody Clone() je více. My si zde ukážeme dva způsoby.

První způsob využívá systémového klonování, které je přebrané ze třídy Object, neboť každý objekt je děděn od této třídy - můžeme toho tedy šikovně využít a použít již hotovou dobrou implementaci.

class Prototype : ICloneable
{
    // Název objektu
    private String _nazev;

    // Veřejný kontruktor pro vytvoření třídy
    public Prototype(String nazev)
    {
        // Nastavení stavu
        this._nazev = nazev;
    }

    // Getter a setter
    public String Nazev
    {
        get { return _nazev; }
        set { _nazev = value; }
    }

    // Rozhraní ICloneable
    #region ICloneable Members

    // Klonovací metoda Clone()
    public object Clone()
    {
        // Vytvoření objektu 
        Object c = null;
            
        // Test implementace metody
        try
        {
            // Vytvoření kopie pomocí děděné metody
            c = base.MemberwiseClone();
        }
        catch (NotImplementedException e)
        {
            // Pokud není implementována metoda Clone - vyjímka
            Console.WriteLine(e.Message);
        }

        // Návrat kopie
        return c;
    }

    #endregion
}

Dalším způsobem je vytvoření nové instance za pomoci privátního kontruktoru, který je přizpůsobený požadavkům klonování. Této možnosti je dobré využít tehdy, chceme-li mít klonování více pod kontrolou nebo pokud chceme s klonovaným objektem ještě něco provést.

// Rozhraní ICloneable
#region ICloneable Members

// Privátní kontruktor pro vytvoření kopie
private Prototype(Prototype o)
{
    // Kopie stavů objektu
    this._nazev = o.Nazev;
}

// Klonovací metoda Clone()
public object Clone()
{
    // Vytvoření nové instance (kopie)
    return new Prototype(this);
}

#endregion
Zobrazit celý článek

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Pro potřebu se socializovat
Last.fm Facebook Twitter RSS Favorites
Ze sociální sítí používám nejvíce službu Twitter. Jednoduší a „vychytanější“ síť jsem neviděl. Facebook je používán jen vlivem soudobé společnosti a neznalostí Twitteru.

Jirka Pénzeš


Grafický designer a programátor zabývající se návrhem a realizací internetových prezentací.

Podívejte se na mé portfólio, kde naleznete některé mé práce.

Tento blog píši o obyčejných věcech, sem tam tu ale nejdete i článek o věcech neobyčejných, které mi právě utkvěly v hlavě.

Veškéré mé články můžete sledovat ve své RSS čtečce a aktuální myšlenky na Twitteru.

Pokud máte nutkání mě kontaktovat z jakého-koliv důvodu, můžete napsat na mail jirkapenzes@seznam.cz nebo můžete zkusit zelenou kytičku nazývanou ICQ 300683037.

Pokračujte v prohlídce:
Portfolio
Fotogalerie
Penzes.cz