Soutěž: Machr na OOP - Reflexe

C# .NET .NET (C# a Visual Basic) Machr na OOP - Reflexe American English version English version

Soutěž již skončila

Zadání

Vaším úkolem v tomto machrovi bude vytvořit funkci (metodu), která dostane instanci nějaké třídy a co nejpřesněji vypíše předpis této třídy. Například v Javě by mohl výstup pro instanci třídy com.something­.NejakaTrida vypadat například takto:

package com.something;

import com.something.etwas.*;

public class NejakaTrida {
        public static final int MaxCount = 80;

        private int count = 16;

        public int getCount();

        public void add(DruhaTrida inst);

        public DruhaTrida get(int index);
}

Pozn.: Třída samozřejmě nebude vypadat takto, tohle je jen ukázka.

Všimněte si hodnot proměnných, vypište je jak u statických proměnných tak u těch "nestatických". Můžete i zjednodušit názvy a použít import / using (pokud ve vámi zvoleném jazyce jsou).

Snažte se vypsat co nejvíce informací dokážete ;) .

Je celkem jedno, jak výstup zobrazíte - klidně ho stačí vypsat do konzole nebo uložit do souboru.

Povolené jazyky jsou Java, C# / Visual Basic a PHP, pokud by někdo chtěl, může to zkusit i v JavaScriptu.

Výhra

Vítěz dostane placku Machr, a ocenění do portfolia.

Výhra

Výsledky

Jméno bodů Řešení ( Stáhnout vše )
pocitac770 100 Stáhnout řešení
Petr Čech (czubehead) 95 Stáhnout řešení
balaz.marek94 80 Stáhnout řešení
Jaroslav Polívka 5 Stáhnout řešení
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

V této soutěži si budete hrát s reflexí.

Soutěž končí 7. února 12:00, tak se nezapomeň zapojit! :)

Odpovědět  +1 28. ledna 9:54
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
jan.ruzicka01
Redaktor
Avatar
jan.ruzicka01:

Škoda, že není povolen Python, v něm by to byla gračka :-D

Nahoru Odpovědět 28. ledna 13:21
';' je má jediná noční můra...
Avatar
Marian Benčat
Redaktor
Avatar
Odpovídá na jan.ruzicka01
Marian Benčat:

Ona je to i hračka v .NETu :-) Dokud se tam netahá třeba generika.

 
Nahoru Odpovědět  +1 28. ledna 14:14
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na jan.ruzicka01
Zdeněk Pavlátka:

Nevím jak v PHP, ale v Javě a C# to je celkem jednoduché.
Genericitou se zabývat nemusíte.

Nahoru Odpovědět 28. ledna 14:23
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Taskkill
Redaktor
Avatar
Taskkill:

Tak ja asi zkusim ten JS :) ani nebudu trvat na tom abyste to brali vazne pri opravovani .... jen pro zabavu

 
Nahoru Odpovědět 28. ledna 17:08
Avatar
Jaroslav Polívka:

Taky zkouším něco vyplodit :)

Nahoru Odpovědět 28. ledna 21:24
Velice často si věci žijí svým životem
Avatar
Petr Čech (czubehead):

Je povoleno použít externí knihovnu jen na přeformátování výsledného kódu?
Starat se o správné odsazení je docela otrava...
konkrétně chci použít NArrange.

Editováno 29. ledna 11:37
Nahoru Odpovědět 29. ledna 11:36
Why so serious? -Joker
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Nahoru Odpovědět 29. ledna 13:59
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
pocitac770
Redaktor
Avatar
pocitac770:

Jak velké nároky na to budou? Tzn. jestli se to bude zkoušet pouze jako samostatná utilitka na pouhé vypsání části "zdrojového kódu", nebo se na to budou dávat námahové testy, jako např. spuštění z 10 vláken najednou, s různými cíli apod? :D

 
Nahoru Odpovědět 29. ledna 14:11
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na pocitac770
Zdeněk Pavlátka:

Žádné námahové testy určitě nebudou, budu vaše výtvory vkládat do různých projektů a zkoušet je na "náhodných" třídách.

Nahoru Odpovědět 29. ledna 14:18
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Petr Čech (czubehead):

Nevadí, že je to o dost víc metod než 1, že ne? A BTW, dá se odevzdat nové řešení?

Nahoru Odpovědět 30. ledna 17:12
Why so serious? -Joker
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Petr Čech (czubehead)
Zdeněk Pavlátka:

Musíš mít jednu metodu, kterou budu volat já. Tahle metoda ale může "neomezeně" volat jiné metody.
Co myslíš "novým řešením"?

Nahoru Odpovědět 30. ledna 18:45
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Petr Čech (czubehead):

Jo super.
Nové řešení je, že třeba najdu v tom, co jsem odevzdal najdu chybu a budu chtít to staré řešení nahradit něčím opravenou verzí, jde to?
edit: to je ale krásný češtin, co? :D

Editováno 30. ledna 18:54
Nahoru Odpovědět 30. ledna 18:53
Why so serious? -Joker
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Petr Čech (czubehead)
Zdeněk Pavlátka:

Mělo by to jít tak, že to prostě znovu odevzdáš a mě se to zobrazí jako nová verze.

Nahoru Odpovědět  +2 30. ledna 18:56
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Petr Čech (czubehead)
Jakub Šárník:

Já teda NArrange neznám, ale není to spíš plugin do VS než knihovna?

 
Nahoru Odpovědět 30. ledna 19:08
Avatar
Odpovídá na Jakub Šárník
Petr Čech (czubehead):

Je to minimálně knihovna, jako plugin do VS by to bylo celkem k ničemu, nemá to co zajímavého nabídnout. Podívej se na NuGet

Nahoru Odpovědět 30. ledna 19:30
Why so serious? -Joker
Avatar
Odpovídá na Petr Čech (czubehead)
Jakub Šárník:

Díval jsem se a rozhodně to není knihovna. Je to spíš externí nástroj.

 
Nahoru Odpovědět 30. ledna 20:01
Avatar
Odpovídá na Jakub Šárník
Petr Čech (czubehead):

A jo, máš pravdu... potom nechápu, proč je to na NuGetu...

Nahoru Odpovědět 30. ledna 20:09
Why so serious? -Joker
Avatar
Petr Čech (czubehead):

Nejspíš mám příušnice a zrovna nemám nic rozdělaného. Nemáte proti mně šanci :D

Nahoru Odpovědět  +2 31. ledna 21:21
Why so serious? -Joker
Avatar
pocitac770
Redaktor
Avatar
Odpovídá na Zdeněk Pavlátka
pocitac770:

Co když budeme mít 3 různé metody, které budou "provozovat" 3 různé způsoby uložení výsledku? :-`

Editováno 1. února 22:10
 
Nahoru Odpovědět 1. února 22:08
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na pocitac770
Zdeněk Pavlátka:

Tak k tomu přidej 1, která bude mít navíc jako parametr typ uložení... (např. pomocí enum)

Nahoru Odpovědět 2. února 9:18
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Petr Čech (czubehead):

Ještě pár detailů:

  • bude nějak ohodnoceno zobrazení výstupu? Nedělá mi problém napsat tam těch pár řádků navíc na uložení do souboru (teď zobrazuju do konzole)
  • metoda si má vzít jako parametr instanci. Statické třídy jsou tedy vyloučeny?
Nahoru Odpovědět 5. února 21:10
Why so serious? -Joker
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Petr Čech (czubehead)
Zdeněk Pavlátka:

Na typu výstupu nezáleží, hodnotí se jeho obsah.
Ano, statické třídy jsou vyloučeny, vždy dostaneš instanci. Ale pokud tam přidáš podporu statických tříd, nějaké ty body navíc se určitě najdou ;)

Nahoru Odpovědět  +1 6. února 9:21
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
balaz.marek94:

Môžeme použiť na reflexiu API z rôznych open source projektov? Alebo musíme využívať iba štandardné API ako je napr. java.lang.reflect ???

 
Nahoru Odpovědět 6. února 22:51
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na balaz.marek94
Zdeněk Pavlátka:

jen standartní API daného jazyka

Nahoru Odpovědět 7. února 8:15
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
pocitac770
Redaktor
Avatar
pocitac770:

Ještě jeden dotaz. V zadání je napsáno, aby se ten parametr s objektem na prozkoumání předával metodě, ale je možnost to předat v konstruktoru? Moc mi to nesedí jako "statika" vzhledem k možnosti zamotání několika různých objektů do stejné třídy, viz jak jsem psal o těch zátěžových testech... (ano, bylo řečeno, že se to nebude zkoušet, ale prostě mi to tam nějak nesedí....), užití: např. při tom, když chceme metodu zavolat víckrát z různých míst po sobě (třeba kvůli zjištění změn v daném objektu), nemusíme si předávat zároveň objekt, stačí pouze ten prozkoumávač

Editováno 7. února 8:33
 
Nahoru Odpovědět 7. února 8:30
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na pocitac770
Zdeněk Pavlátka:

Klidně to tak udělej, ničemu to nevadí ;)

Nahoru Odpovědět 7. února 8:59
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
pocitac770
Redaktor
Avatar
pocitac770:

V posledních asi 30 vteřinách odesláno :D Doufám, že jsem tam něco nezapomněl přiložit, že je tam vše, co je potřeba (projekt "ReflexeTest" je funkční příklad užití), jsou tam složky s projekty... Tak mi prosím někdo řekněte, jestli je to v pořádku... :D
A kdy že by měly být výsledky?

 
Nahoru Odpovědět 7. února 12:05
Avatar
pocitac770
Redaktor
Avatar
pocitac770:

//EDIT: jsou tam ještě omylem přibalené v té testovací třídě nějaké moje starší "projekty" na testování, toho si prosím nevšímejte, při buildu se z nějakého důvodu neodstranily...

 
Nahoru Odpovědět 7. února 12:09
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

Díky všem za účast, zde jsou výsledky:

Jaroslav Polívka - 5 bodů
Očividně jsi moc nepochopil zadání. Nejen že tam nemáš metodu na vypsání předpisu třídy (1. věta zadání) - máš to jako součást jiné metody, ale dokonce ani tam ten předpis třídy nevypíšeš, vypisuješ jen seznam metod apod.

Co se týče vypisování hodnot proměnných, dá se pochopit, že nevypisuješ neznámé instance, ale např. String by jsi asi vypisovat měl. Navíc i u těch instancí je metoda toString().

A k tomuhle kódu bych měl pár připomínek:

String nazevTridy =  "" + edisonka.getClass().getName();
// ...
Class<?> c = Class.forName(nazevTridy);
  1. "" + edisonka.getClas­s().getName()
    • Class.getName() vrací String, takže připojovat ho k prázdnému Stringu je tak trochu nesmysl
  2. Class.forName(na­zevTridy)
    • Nechápu, proč tu "třídu" hledáš podle jména, když jí už máš k dispozici přes edisonka.getClas­s().

Petr Čech (czubehead) - 95 bodů

Tvé řešení se mi velmi líbilo, mám jen pár drobných připomínek
Je celkem zbytečné vypisovat using pro namespace ve kterém "jsi", např.:
using Reflex;
namespace Reflex {
    // ...
}

- pokud se chceš zbavit duplicitních hodnot, můžeš místo listu a metody Where(pair => !namespaces.Con­tains(pair.Va­lue)) použít množinu (HashSet), která si duplicitní hodnoty hlídá sama při vkládání
- u TrimTypeName by jsi mohl přidat podporu pro long (Int64), short (Int16) a byte (Byte) a typy bez znaménka (uint apod.)

Za tohoto machra získáváš placku, můžeš si vybrat mezi C# a OOP.

balaz.marek94 - 80 bodů
Tvůj výtvor nevypadá špatně, jen škoda, že nevypisuje hodnoty proměnných.

pocitac770 - 100 bodů
Krásný výtvor, + jako jediný umí vypsat vnořené třídy.

Za tohoto machra získáváš placku, můžeš si vybrat mezi Javou a OOP.

Placku tedy získává czubehead, počítač770 Gratuluji :)

Nahoru Odpovědět  +2 7. února 17:22
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Petr Čech (czubehead):

Díky, myslím, že ty duplicitní namespacy jsem tam někdy v počátku vývoje zakomponoval, ale časem se to zkomplikovalo.

Nahoru Odpovědět 7. února 17:34
Why so serious? -Joker
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 33 zpráv z 33.