C# napredniji koncepti OOP-a

poruka: 26
|
čitano: 8.998
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
C# napredniji koncepti OOP-a

Imam jednu veliku rupu u svom znanju o programiranju koju mislim da treba čim prije popuniti. Zanima me gdje mogu čitati malo o stvarima kao što su polymorphisam, virtualne klase, abstraktne klase, interfejsi itd. Sve što ja znam su normalne klase i nasljeđivanje. Mislim mogu ja guglat svaki pojam posebno, ali što ako su povezani ili neki propustim?

Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Re: C# napredniji koncepti OOP-a
12 godina
neaktivan
offline
C# napredniji koncepti OOP-a

Možeš krenuti npr. s polimorfizmom (virtualne funkcije). Kad to shvatiš biti će ti jasno što je i apstraktna klasa jer su ti pojmovi povezani.

Moj PC  
0 0 hvala 1
14 godina
neaktivan
offline
Re: C# napredniji koncepti OOP-a

  Evo prijavio sam se za trial, gledam naokolo i čini mi se ok, al nema šanse da im ja dam 150 kn na mjesec. Tko će mi dat te novce? Guglat ću malo naokolo kao što Tracer kaže.

Edit: Ja ću se isguštirat na ovom sajtu dok traje   trial, ali kasnije tražim alternativu

Poruka je uređivana zadnji put sri 14.3.2012 21:49 (King of Games).
16 godina
neaktivan
offline
C# napredniji koncepti OOP-a

Ovo je dobra knjiga za naućiti polimorfizam, virtualne i apstraktne metode i klase, interface-e.

Nema primjera za vježbanje, nego kroz jedan primjer koji se razrađuje po poglavlju dobro objašnjava stvari.

http://www.knjizara.hr/detalji_proizvoda.1ec0f4c54a404c9ea6603ef5a15e7a66.programiranje-c-4-0.aspx

Što se tiče baš ovog poglavlja polimorfizma. tip je našao genijalan primjer za objasniti ga, u samo nekoliko podpoglavlja čovjeka prošeta kroz sve stvari, 

od skrivanja metoda keywordom new, preko override-a virtualnog metoda, korištenja apstraktne klase i override-a apstraktnog metoda do korištenja interface-a.

 

Ovo je engleski original:

http://shop.oreilly.com/product/9780596159849.do

Poruka je uređivana zadnji put čet 15.3.2012 12:07 (Floki).
 
0 0 hvala 1
14 godina
neaktivan
offline
Re: C# napredniji koncepti OOP-a
Floki kaže...

Ovo je dobra knjiga za naućiti polimorfizam, virtualne i apstraktne metode i klase, interface-e.

Nema primjera za vježbanje, nego kroz jedan primjer koji se razrađuje po poglavlju dobro objašnjava stvari.

http://www.knjizara.hr/detalji_proizvoda.1ec0f4c54a404c9ea6603ef5a15e7a66.programiranje-c-4-0.aspx

Što se tiče baš ovog poglavlja polimorfizma. tip je našao genijalan primjer za objasniti ga, u samo nekoliko podpoglavlja čovjeka prošeta kroz sve stvari,

od skrivanja metoda keywordom new, preko override-a virtualnog metoda, korištenja apstraktne klase i override-a apstraktnog metoda do korištenja interface-a.

 

Ovo je engleski original:

http://shop.oreilly.com/product/9780596159849.do

  Hvala! Mislio sam da ću to brzo naučiti, ali zašto ne. Imam vremena za knjigu. Ovaj tvoj opis stvarno baca ljepo svijetlo na knjigu pa mislim da vrjedi probat.

 

EDIT: Evo sad gledam knigu (stvarno bih morao prvo pogledati što mi ljudi šalju prije nego što odgovaram) te nisam zadovoljan. Kao prvo teško će mi biti nabaviti hrvatsku verziju (engleska ne dolazi u obzir) i ilegalno i legalno. A kao drugo bavi se mnogim ostalim stvarima osim ovog što sam ja nabrojao. Možeš li mi reći što je taj misteriozni LINQU o kojem razmišljam već par dana? Dali meni to trenutno treba? Što preporučaš da sljedeće učim, ovo što sam naumio ili te hebene baze podataka o kojima očito svi nešto znaju osim mene?

Poruka je uređivana zadnji put čet 15.3.2012 21:38 (King of Games).
16 godina
neaktivan
offline
C# napredniji koncepti OOP-a

Pa i hoćeš brzo naučiti, cijelo poglavlje ima 40 stranica i postupno razrađuje jednu aplikaciju.

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: C# napredniji koncepti OOP-a
Floki kaže...

Pa i hoćeš brzo naučiti, cijelo poglavlje ima 40 stranica i postupno razrađuje jednu aplikaciju.

  Baci oko na edit. Mrzim što moram pisat ovakav post ali eto, htio bih biti siguran da vidiš ono tamo napisano.

16 godina
neaktivan
offline
C# napredniji koncepti OOP-a

Ja sam radio samo sa LINQ TO OBJECTS i samo par puta, nemam nekog iskustva u tome, uglavnom LINQ daje dobru sintaksu za rad sa kolekcijama, sa svim onim što implementira interface IEnumerable<T>,

ali objašnjenje LINQ-a bi prepustio nekom tko ima to u malom prstu. Šteta ti je onda što ne možeš nabaviti hrvatsku verziju te knjige, to ti je zaokružena cjelina, ima i LINQ.

 
0 0 hvala 0
16 godina
odjavljen
offline
C# napredniji koncepti OOP-a

LINQ je majka. Osobno mi je nezamislivo bilo kakvo programiranje bez upotrebe Linq2 Sql ili Linq 2 Objects (pogotovo)

Freak Show Inc.
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: C# napredniji koncepti OOP-a
Friday kaže...

LINQ je majka. Osobno mi je nezamislivo bilo kakvo programiranje bez upotrebe Linq2 Sql ili Linq 2 Objects (pogotovo)

  Zaista? Pa šta nije to samo za baze podataka. Ako ne mislim raditi s njima, šta će mi LINQ? Daj mi objasni što je to točno. Nekako mi opis "LINQ je majka" nije dovoljno detaljan.

 

BTW, što se tiče mog učenja OOP-a uspio sam ninja vještinama (mislim da znate) dobiti pristup Plularsightovim videima, pa ću ići od toga. Samo da shvatim osnovu pa dalje lako istražujem.

15 godina
offline
C# napredniji koncepti OOP-a

1. B. Stroustrup: The C++ Programing Language, Addison-Wesley, Reading, 1986.
2. S. Lippman: C++ Primer 2ed, Addison-Wesley, Reading, 1994.

League Of Legends EUW IGN: slinA ...ONE SHOT, ONE KILL, NO LUCK JUST SKILL!
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: C# napredniji koncepti OOP-a
AmonZero kaže...

1. B. Stroustrup: The C++ Programing Language, Addison-Wesley, Reading, 1986.
2. S. Lippman: C++ Primer 2ed, Addison-Wesley, Reading, 1994.

  Hvala, ali evo kao što sam napisao u prethodnom postu, odlučio sam se učiti kroz plularsightove videe, pošto je tako jednostavnije za shvatiti. Inače bilo bi malo komplicirano učit s ove dvije knjige jer su na engleskome, a dok čitam teže štivo nedami se još engleski prevodit, također knjige su za C++ a ne za C# pa bi to još više otežalo shvaćanje, a pročitao sam da je Stroustrupova "biblija" overkill za nekog poput mene.

16 godina
odjavljen
offline
Re: C# napredniji koncepti OOP-a
King of Games kaže...
Friday kaže...

LINQ je majka. Osobno mi je nezamislivo bilo kakvo programiranje bez upotrebe Linq2 Sql ili Linq 2 Objects (pogotovo)

  Zaista? Pa šta nije to samo za baze podataka. Ako ne mislim raditi s njima, šta će mi LINQ? Daj mi objasni što je to točno. Nekako mi opis "LINQ je majka" nije dovoljno detaljan.

 

BTW, što se tiče mog učenja OOP-a uspio sam ninja vještinama (mislim da znate) dobiti pristup Plularsightovim videima, pa ću ići od toga. Samo da shvatim osnovu pa dalje lako istražujem.

 

Linq 2 sql je za baze i olakšava CRUD developerima (barem za jednostavne slučajeve). Linq 2 objects će ti olakšati baratanje sa određenim tipovima objekata (kao što je kolega Floki gore već spomenuo). Kad se jednom naučiš na lambda expressions, nema povratka... Ja sam bio primoran napraviti klasu za kvazi generičku serijalizaciju/deserijalizaciju soap objekata jer zbog loše složenog java servisa .net soap formatter nije znao baratati sa upitima/odgovorima. To bi mi bilo nezamislivo bez Linq 2 sql-a... Kao što rekoh, majka... Uhvati se toga!

Freak Show Inc.
16 godina
neaktivan
offline
C# napredniji koncepti OOP-a

Ovo ti je primjer kako LINQ 2 Objects olakšava baratanje sa kolekcijama.

Imamo neku listu int brojeva 1-10. Zadatk je u novu listu zadnjih5Plus5 staviti 5 zadnjih brojeva iz postojeće liste lista i zbrojiti ih sa 5.

 

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LINQ_primjer
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> lista = new List<int>();
            for (int i = 1; i <= 10; i++)
            {
                lista.Add(i);
            }

            var zadnjih5Plus5 = from broj in lista // tražimo objekt broj u listi
                                   where broj > 5 // gdje je broj veći od 5
                                   select broj + 5; // taj broj zbrajamo sa 5 i dodajemo u listu zadnjih5Plus5

            foreach (var broj in zadnjih5Plus5) //
            {
                Console.WriteLine(broj);
            }
        }
    }
}

 

Ovdje se radi o lijenoj enumeraciji, ovaj blok koda gdje preko LINQ-a tražimo listu zadnjih5Plus5 ne izvodi se prije pokretanja petlje foreach, tek kad drugi kod zatraži listu zadnjih5Plus5 "lijeni" LINQ se sjeti da i on mora učiniti svoj dio posla.

Zamisli sad situaciju da imamo objekte klase Medvjed gdje medvjede moramo poredati u listu prema broju postignurih golova:

 

var najboljiMedvjed = from medvjed in Medvescak
                         orderby medvjed.BrojGolova  // poredamo mede prema broju postignutih golova
                         where medvjed.BrojGolova > 0   // uzmemo samo one mede koje su zabile bar jedan gol
                         select medvjed;   // dodajemo takvog medu u listu najboljiMedvjed

 

Poruka je uređivana zadnji put ned 18.3.2012 13:35 (Floki).
 
0 0 hvala 1
16 godina
neaktivan
offline
C# napredniji koncepti OOP-a

Evo cijeli primjer da vidiš o kakvoj se tehnici radi.

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LINQ_primjer
{
    class Medvjedi
    {
        public string Ime
        {
            get;
            set;
        }
        public int BrojGolova
        {
            get;
            set;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {

            List<Medvjedi> medvescakIgraci = new List<Medvjedi>();
            Medvjedi igrac1 = new Medvjedi
            {
                Ime = "Marko",
                BrojGolova = 12
            };
            medvescakIgraci.Add(igrac1);
            Medvjedi igrac2 = new Medvjedi
            {
                Ime = "Janko",
                BrojGolova = 18
            };
            medvescakIgraci.Add(igrac2);
            Medvjedi igrac3 = new Medvjedi
            {
                Ime = "John",
                BrojGolova = 32,
            };
            medvescakIgraci.Add(igrac3);
            Medvjedi igrac4 = new Medvjedi
            {
                Ime = "Tom",
                BrojGolova = 5
            };
            medvescakIgraci.Add(igrac4);
            Medvjedi igrac5 = new Medvjedi
            {
                Ime = "Sven",
                BrojGolova = 0
            };
            medvescakIgraci.Add(igrac5);

            var listaStrijelaca = from medvjed in medvescakIgraci // poput petlje foreach prolaz kroz objekte kolekcije
                                  orderby medvjed.BrojGolova descending  // poredamo mede prema broju postignutih golova
                                  where medvjed.BrojGolova > 0   // uzmemo samo one mede koje su zabile bar jedan gol
                                  select medvjed;   // dodajemo takvog medu u listu strijelaca

            Console.WriteLine("IME\t BROJ GOLOVA");
            foreach (var medvjed in listaStrijelaca)
            {
                Console.WriteLine("{0}\t {1}", medvjed.Ime, medvjed.BrojGolova);
    
            }
        }
    }
}

Poruka je uređivana zadnji put ned 18.3.2012 14:36 (Floki).
 
0 0 hvala 1
14 godina
neaktivan
offline
Re: C# napredniji koncepti OOP-a
Friday kaže...
King of Games kaže...
Friday kaže...

LINQ je majka. Osobno mi je nezamislivo bilo kakvo programiranje bez upotrebe Linq2 Sql ili Linq 2 Objects (pogotovo)

  Zaista? Pa šta nije to samo za baze podataka. Ako ne mislim raditi s njima, šta će mi LINQ? Daj mi objasni što je to točno. Nekako mi opis "LINQ je majka" nije dovoljno detaljan.

 

BTW, što se tiče mog učenja OOP-a uspio sam ninja vještinama (mislim da znate) dobiti pristup Plularsightovim videima, pa ću ići od toga. Samo da shvatim osnovu pa dalje lako istražujem.

 

Linq 2 sql je za baze i olakšava CRUD developerima (barem za jednostavne slučajeve). Linq 2 objects će ti olakšati baratanje sa određenim tipovima objekata (kao što je kolega Floki gore već spomenuo). Kad se jednom naučiš na lambda expressions, nema povratka... Ja sam bio primoran napraviti klasu za kvazi generičku serijalizaciju/deserijalizaciju soap objekata jer zbog loše složenog java servisa .net soap formatter nije znao baratati sa upitima/odgovorima. To bi mi bilo nezamislivo bez Linq 2 sql-a... Kao što rekoh, majka... Uhvati se toga!

  Um.. Ne kužim većinu toga što si napisao. CRUD? Lambada? Serijalizacija? Soap? Formatter? Majka?

Floki kaže...

Ovo ti je primjer kako LINQ 2 Objects olakšava baratanje sa kolekcijama.

Imamo neku listu int brojeva 1-10. Zadatk je u novu listu zadnjih5Plus5 staviti 5 zadnjih brojeva iz postojeće liste lista i zbrojiti ih sa 5.

 

 

 

//KOD

 

Ovdje se radi o lijenoj enumeraciji, ovaj blok koda gdje preko LINQ-a tražimo listu zadnjih5Plus5 ne izvodi se prije pokretanja petlje foreach, tek kad drugi kod zatraži listu zadnjih5Plus5 "lijeni" LINQ se sjeti da i on mora učiniti svoj dio posla.

Zamisli sad situaciju da imamo objekte klase Medvjed gdje medvjede moramo poredati u listu prema broju postignurih golova:

 

//KOD

 

Floki kaže...

Evo cijeli primjer da vidiš o kakvoj se tehnici radi.

 

 

//KOD

  Eeee... sad mi je malo jasnije. Samo imam još par novih pitanja.

 

Zašto to? Ja bi tako nešto napravio bez LINQ-ua. Zašto treba cjela ta konponenta samo za radit s kolekcijama? Zar su one tako bitne?

Izgleda jednostavnije nego što bi ja to riješio, ali malo nespretno. Imam ja i set videa o LINQ-u na Plularsightu, pa mogu probat.

A šta su ovi drugi LINQ-ui o kojima Friday priča?

Poruka je uređivana zadnji put ned 18.3.2012 20:22 (King of Games).
16 godina
neaktivan
offline
C# napredniji koncepti OOP-a

Pa pogledaj ovdje primjere u kakvim sve stvarima možeš koristiti LINQ upite u LINQ 2 Objects

http://msdn.microsoft.com/en-us/library/bb397919.aspx

 

A vidim da čovjeku govoriš da ne kužiš izraze lambda, serijalizacija, SOAP. Pa ja sam ti lijepo preporučio knjigu koja sve to obrađuje, a ti kažeš, enleski neću, ne da mi se prevoditi, hrvatski neću, iz drugog razloga. E tu ja ne mogu ništa, ja sam svoje rekao.

Poruka je uređivana zadnji put ned 18.3.2012 20:48 (Floki).
 
0 0 hvala 0
16 godina
odjavljen
offline
C# napredniji koncepti OOP-a

Lambda izrazi ti služe da uštediš vrijeme - ajd neka ti za sada to bude osnovna misao. Dakle, recimo da imaš listu nekakvih int elemenata i zanima te zbroj svih elemenata koji su veći od recimo 20. Bez lambda izraza morao bi napraviti petlju u kojoj bi svaki pojedini element ispitivao i po potrebi njegovu vrijednost dodavao u sumarnu varijablu. Sa lambda izrazima (linq to objects) to svedeš na jednu liniju koda (recimo da je "lista" objekt tipa List<int>):

 

var suma = lista.Where(p => p > 20).Sum();

 

Ovo je totalno banalan primjer, u praksi je ušteda u vremenu i nakucanom kodu ogromna a kod je puno pregledniji i jasniji! (vidiš kako je jasno naznačeno filtriranje elemenara (Where) i što se radi sa onima koji zadovoljavaju uvjet(Sum)).

Mogućnosti su goleme ali trebaš ipak malo pročitati o tome, na forumu ćeš dobiti samo smjernice.

Freak Show Inc.
 
0 0 hvala 1
14 godina
neaktivan
offline
Re: C# napredniji koncepti OOP-a
Floki kaže...

Pa pogledaj ovdje primjere u kakvim sve stvarima možeš koristiti LINQ upite u LINQ 2 Objects

http://msdn.microsoft.com/en-us/library/bb397919.aspx

 

A vidim da čovjeku govoriš da ne kužiš izraze lambda, serijalizacija, SOAP. Pa ja sam ti lijepo preporučio knjigu koja sve to obrađuje, a ti kažeš, enleski neću, ne da mi se prevoditi, hrvatski neću, iz drugog razloga. E tu ja ne mogu ništa, ja sam svoje rekao.

  Ma dobar je meni engleski inače, ali neželim čitat o nečem tako kompliciranom a da nije na mojem primarnom jeziku. Teže se shvaća. Ja sam ove nepoznate pojmove nabubao samo da dokažem da mi ništa nije jasno. Bit će vremena za učenje toga.

Friday kaže...

Lambda izrazi ti služe da uštediš vrijeme - ajd neka ti za sada to bude osnovna misao. Dakle, recimo da imaš listu nekakvih int elemenata i zanima te zbroj svih elemenata koji su veći od recimo 20. Bez lambda izraza morao bi napraviti petlju u kojoj bi svaki pojedini element ispitivao i po potrebi njegovu vrijednost dodavao u sumarnu varijablu. Sa lambda izrazima (linq to objects) to svedeš na jednu liniju koda (recimo da je "lista" objekt tipa List<int>):

 

var suma = lista.Where(p => p > 20).Sum();

 

Ovo je totalno banalan primjer, u praksi je ušteda u vremenu i nakucanom kodu ogromna a kod je puno pregledniji i jasniji! (vidiš kako je jasno naznačeno filtriranje elemenara (Where) i što se radi sa onima koji zadovoljavaju uvjet(Sum)).

Mogućnosti su goleme ali trebaš ipak malo pročitati o tome, na forumu ćeš dobiti samo smjernice.

  Dakle lambada je LINQ to objects? Razumjem, lakše je ovako nego s petljama. Neznam koliko će mi to trebat, mislim da mi zasat LINQ neće biti prioritet.

16 godina
odjavljen
offline
Re: C# napredniji koncepti OOP-a
King of Games kaže...

  Dakle lambada je LINQ to objects? Razumjem, lakše je ovako nego s petljama. Neznam koliko će mi to trebat, mislim da mi zasat LINQ neće biti prioritet.

 

Kao prvo - nije lambada, pas mater...

Kao drugo, nije ti ni ova izjava točna. Evo ti službena definicija lambda expressiona sa msdn-a: A lambda expression is an anonymous function that can contain expressions and statements, and can be used to create delegates or expression tree types.

Freak Show Inc.
Poruka je uređivana zadnji put ned 18.3.2012 22:08 (Friday).
14 godina
neaktivan
offline
Re: C# napredniji koncepti OOP-a
Friday kaže...
King of Games kaže...

  Dakle lambada je LINQ to objects? Razumjem, lakše je ovako nego s petljama. Neznam koliko će mi to trebat, mislim da mi zasat LINQ neće biti prioritet.

 

Kao prvo - nije lambada, pas mater...

Kao drugo, nije ti ni ova izjava točna. Evo ti službena definicija lambda expressiona sa msdn-a: A lambda expression is an anonymous function that can contain expressions and statements, and can be used to create delegates or expression tree types.

  Kvragu, ne čitam. A i činilo mi se smiješno.

 

16 godina
neaktivan
offline
C# napredniji koncepti OOP-a

Grčki alfabet - lambda /\ 

no sikiriki, nije grijeh fulati{#}

To je u stvari matematički pojam taj lambda izraz, a odnosi se na formalni opis svojstva funkcije.

 

Poruka je uređivana zadnji put pon 19.3.2012 22:35 (Floki).
 
1 0 hvala 0
12 godina
neaktivan
offline
C# napredniji koncepti OOP-a

Lambda iskazi su ti na neki način i anonimni delegati, jer je moguće kastovati lambda izraz u delegat. 

 

Npr. ne moraš da kreiraš metodu da bi završio neki jednostavni posao, već kreiraš lambda izraz u bloku te metode i koristiš ga u tom bloku koliko god puta ti želiš. Možeš da vežeš i nekoliko lamda izraza kroz delegat, pa da se svi zajedno okidaju simultano.

 

Ako budeš dobro razumeo delegate razumećeš i lambda izraze.

 
0 0 hvala 0
11 godina
neaktivan
offline
C# napredniji koncepti OOP-a

Pluralsight videi su definitivno najbolji tutorijali, pogotovo oni Scotta Allena (C# Fundametals). Dosta te nauče o objektno orijentiranom pristupu, pogotovo o  modifikatorima pristupa (public, abstract, private, protected, internal, partial...). Jedina mana je što se plaćaju poveliku svotu novca.

 

Inače preporučio bih ti knjigu :

http://www.amazon.com/Beginning-Object-Oriented-Programming-Dan-Clark/dp/1430235306/ref=sr_1_1?ie=UTF8&qid=1372607112&sr=8-1&keywords=c%23+oop

Gboduljak
Moj PC  
0 0 hvala 0
11 godina
neaktivan
offline
C# napredniji koncepti OOP-a

Imaš inače i dobrih tutorijala po YouTube-u.{#}

Gboduljak
Poruka je uređivana zadnji put ned 30.6.2013 17:48 (ShAdOw_GaBa).
Moj PC  
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice