Vežbe - praktični zadatak sa časa
Ove vežbe mogu da se rade na dva načina:
- pomoću online alata (npr. https://www.programiz.com/csharp-programming/online-compiler/)
- pomoću programskog okruženja koje je instalirano na računaru (npr Visual Studio)
Ako se koristi online okruženje
odmah se dobija početna struktura
using System; public class HelloWorld
{
public static void Main(string[] args)
{
Console.WriteLine ("Start small. Ship something.");
}
}
Ako se koristi npr. Visual Studio 2010, mi prvo treba da kreiramo novi projekat (prviProjekat):
File - New Project - Visual C# - windows - Console Application ....
Tada se dobija nešto kao ovo prikazano iza dugmeta
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace prviProjekat
{
class Program
{
static void Main(string[] args)
{
}
}
}
1 - Klasa i objekti
Prvo se kreira jedna klasa - Ucenik, koja ima samo jedno svojstvo - ime:
class Ucenik
{
public string ime;
}
Napomena: Klasa se kreira ili pre ili posle klase Program
- Početna tačka - odakle program počinje da radi je metoda Main koja se nalazi u klasi Program.
- U metodi Main se kreiraju objekti od klasa koje pravimo:
Ucenik u1 = new Ucenik();
Ucenik u2 = new Ucenik();
Zasad ne ulazimo u detalje - dovoljno je samo da znate da se sa ove dve linije koda kreiraju dva objekta.
Čak i ako se program pokrene, neće biti prikaza, jer to još nismo uradili. Prvo ćemo da postavimo imena u ta dva objekta, a zatim da to ispišemo:
u1.ime = "Pera";
u2.ime = "Mika";
Console.WriteLine("Ucenik 1 -> " + u1.ime);
Console.WriteLine("Ucenik 2 -> " + u2.ime);
Napomene:
- delovima objekta se pristupa pomoću operatora tačka (.)
- ispis u konzoli se vrši ili sa Console.WriteLine (ispis i prelazak u naredni red) ili sa Console.Write (ispis i ostajanje u istom redu)
Ako se radi u online okruženju, program se pokreće klikom na "Run" dugme, a ako se radi u radnom okruženji Visual Studio, na računaru, koriste se adekvatne opcije (zelena strelica, Debug-Run ili Debug-Run whitout debugging, F5 ili Ctrl+F5)
- ako se program vrši u okruženju na računaru, i ako se izvrši i odmah zatvori, jedno od rešenja je da se od korisnika traži da unese bilo koje slovo pomoću: Console.ReadKey();
2 - metode u klasi i enkapsulacija
Akcije koje učenike može da radi - ili metode klase Ucenik - metode koje svaki konkretan objekat klase može da radi za sebe.
U jeziku C su postojele funkcije, za akcije koje treba da se vrše, ali u C# je sve vezano za objekte i klase.
U ovom primeru biće samo metoda za ispis podataka o učeniku - nalazi se unutar klase - dodati odmah nakon svojstva ime:
class Ucenik
{
public string ime;
public void Ispis()
{
Console.WriteLine("Ime ucenika je " + ime);
}
}
Unutar metode Main upotrebiti metode za svaki od do sada kreiranih objekata:
u1.Ispis();
u2.Ispis();
U ovom primeru je demonstrirana enkapsulacija - podaci i metode koji pripadaju nekom objektu se drže zajedno, „u paketu“ - i ime i ispis imena učenika.
Ispis ne mora da se vrđi samo pomoću metode objekta. Ako je dozvoljen pristup delovima objekta, onda može da se koristi veliki broj načina ispisa, kao na primer:
Console.Write("Učenik 1 ima ime " + u1.ime + "\n");
Console.Write("Učenik 2 ima ime " + u2.ime);
Console.WriteLine();
3 - nasleđivanje
Princip je nasleđivanja biće demonstriran tako što ćemo da dodamo klasu SpecijalniUcenik koja nasleđuje klasu Ucenik i ima sve što uma i učenik, ali i ima još nešto: specijalnost ...
class specijalniUcenik : Ucenik
{
public string specijalnost = "nadaren"; // inicijalna vrednost
}
Sa dvotačkom je označeno nasleđivanje.
U glavnoj metodi Main ćemo kreirati treći objekat - specijalnog učenika:
specijalniUcenik u3 = new specijalniUcenik();
u3.ime = "Simonida";
u3.Ispis();
Ovde se vidi da SpecijalniUcenik ima svojstvo ime i metodu Ispis(), koje je nasledio od klase Ucenik.
Ako je dozvoljen pristup delovima objekta, onda im se može i menjati vrednost:
u3.specijalnost = "TALENAT";
Console.Write(u3.ime + " je " + u3.specijalnost);
Console.WriteLine();
4 - polimorfizam
polimorfizam- „više oblika“ - jedna ista metoda može da ima različite oblike u zavisnosti od parametara koji joj se prosleđuju.
Kao primer u kojem se demonstrira polimorfizam upotrebićemo klasu SpecijalniUcenik. Dodađemo metodu za ispis podataka i to dva puta: prvi put bez parametara, a drugi put sa jednim parametrom kojim će biti rečeno koliko puta će da se ponovi ispis:
class specijalniUcenik : Ucenik
{
public string specijalnost = "nadaren";
public void ispisss() // prva metoda za ispis podataka - BEZ PARAMETARA
{
Console.WriteLine(ime + " je " + specijalnost);
}
public void ispisss(int x) // druga metoda za ispis podataka - SA 1 PARAMETROM
{
for (int i = 0; i < x; i++)
{
Console.WriteLine(ime + " je " + specijalnost);
}
}
}
U glavnoj metodi (Main) ćemo upotrebiti obe metode:
u3.ispisss();
Console.WriteLine("******************");
u3.ispisss(3);
Metoda ispiss() se isto zove u oba slučaja. Kompajler će na osnovu toga da li je postavljen parametar unutar zagrada ili ne, da odluči koju od njih će da pozove.
Na kraju bloka od 3 časa, kompletan program koji je rađen u razvojnom okruženju Visual Studio izgleda kao iza OVOG dugmenceta
Kompletan projekat na kraju časova vežbi, sa računara nastavnice iz učionice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace prviProjekat
{
class Ucenik
{
public string ime;
public void Ispis()
{
Console.WriteLine("Ime ucenika je " + ime);
}
}
class specijalniUcenik : Ucenik
{
public string specijalnost = "nadaren";
public void ispisss()
{
Console.WriteLine(ime + " je " + specijalnost);
}
public void ispisss(int x)
{
for (int i = 0; i < x; i++)
{
Console.WriteLine(ime + " je " + specijalnost);
}
}
}
class Program
{
static void Main(string[] args)
{
Ucenik u1 = new Ucenik();
Ucenik u2 = new Ucenik();
u1.ime = "Pera";
u2.ime = "Mika";
Console.WriteLine("Ucenik 1 -> " + u1.ime);
Console.WriteLine("Ucenik 2 -> " + u2.ime);
// Console.ReadKey();
u1.Ispis();
u2.Ispis();
Console.Write("Učenik 1 ima ime " + u1.ime + "\n");
// u1.Ispis();
Console.Write("Učenik 2 ima ime " + u2.ime);
Console.WriteLine();
// u2.Ispis();
specijalniUcenik u3 = new specijalniUcenik();
u3.ime = "Simonida";
u3.Ispis();
u3.specijalnost = "TALENAT";
Console.Write(u3.ime + " je " + u3.specijalnost);
Console.WriteLine();
u3.ispisss();
Console.WriteLine("******************");
u3.ispisss(3);
}
}
}
...