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?
C# napredniji koncepti OOP-a
- poruka: 26
- |
- čitano: 8.998
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
PluralSight.
http://www.pluralsight-training.net/microsoft/
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.
PluralSight.
http://www.pluralsight-training.net/microsoft/
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
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:
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:
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?
Pa i hoćeš brzo naučiti, cijelo poglavlje ima 40 stranica i postupno razrađuje jednu aplikaciju.
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.
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.
LINQ je majka. Osobno mi je nezamislivo bilo kakvo programiranje bez upotrebe Linq2 Sql ili Linq 2 Objects (pogotovo)
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.
1. B. Stroustrup: The C++ Programing Language, Addison-Wesley, Reading, 1986.
2. S. Lippman: C++ Primer 2ed, Addison-Wesley, Reading, 1994.
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.
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!
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
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);
}
}
}
}
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?
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
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?
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.
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.
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.
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.
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.
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.
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.
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.
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
Imaš inače i dobrih tutorijala po YouTube-u.