Klasa je šablon za objekat koji opisuje vrstu i količinu podataka koje će objekat sadržavati, ali ne predstavlja ni jedan određen primerak objekta. Tačnije, klase u osnovi predstavljaju šablone iz kojih se mogu stvarati objekti. Objekti sadrže podatke i metode za manipulisanje i pristup podacima, ali klasa određuje koje podatke mora da sadrži svaki konkretan objekat iako klasa sama ne sadrži nikakve podatke. Taj konkretan objekat uglavnom u literaturi se naziva primerak ili instanca. Inače klasa kao reč je nastala prema pojmu klasifikacija. Kada pravite klasu, vi uređujte članove klase u smisleni entitet. Za razliku od stuktura, klase vam daju mnogo veću fleksibilnost i više mogućnosti s obzirom da klase podržavaju nasleđivanje. Strukture su vrednosni tip podataka dok su klase referentni tip. Klase imaju ključnu ulogu u C# programskom jeziku i kodiraju se drugačije od klasa u C++ programskom jeziku. O klasama u C++ programskom jeziku možete pogledati ovde. Rad sa klasama u C# programskom jeziku je mnogo jednostavniji.
( Diagram članova klase u C# programskom jeziku )
Primer iz stvarnog sveta za klasu možete zamisliti i kao svojstva koja opisuju na primer tramvaj. Tramvaj ima motor, sedišta, kočnice, ponekad i klima uređaj; može da se vozi napred i nazad. Klasa opisuje sva svojstva i radnje koje jedan tramvaj poseduje ali klasa ne predstavlja ni jedan određen tramvaj. U stvarnom svetu tramvaj bi predstavljao objekat. S obzirom da postoje različiti tramvaji, znači da postoje i različiti objekti; ali svi bi objekti tramvaj bili prepoznati kao primerci klase tramvaj. Klase opisuju svojstva i ponašanje objekta preko članova. Članovi klase mogu biti polja, svojstva, metode i događaji. Klasu pravite tako što koristite ključnu reč class. Sintaksa za pravljenje klase je sledeća:
class ime_klase
{
članovi_klase
}
Šta je enkapsulacija?
Enkapsulacija, enkapsuliranje što u prevodu znači zamotavanje je način da vi sakrijete, zaštitite i kontrolišete pristup podacima koji se nalaze u objektu. To radite tako što članovima klase odredite rang vidljivosti, tj. odredite koji članovi klase su na primer javni, privatni, zaštićeni ili interni. Na primer dok vi gledate realiti šou na TV, vas ne interesuje kako televizor prikazuje realiti šou. Vas interesuje da gledate program. Tako isto kad koristite objekte, bilo da su objekti vaši ili da je objekte neko drugi pravio; vi želite da objekti rade ono za šta su namenjeni, bez obzira koliki vi uvid imate u ono kako tačno objekat radi. Znači, enkapsulaciju koristite u vašim klasama kad hoćete da kontrolišete skrivenost članova klase koju će objekat da koristi.
Šta je polimorfizam?
Za razliku od struktura, klase možete nasleđivati. Nasleđivanje klasa nazivamo polimorfizam. Ako imate klasu osoba, onda nema potrebe da pišete ista svojstva za klasu student ili klasu zaposleni. Jednostavno ćete kreirati da klasa student nasledi klasu osoba i klasa student će naslediti sve članove klase osoba. Na taj način nema potrebe da dvaput pišete isti kod. Samo jednu stvar uvek morate da imate u vidu. Jedna klasa može da nasledi samo jednu klasu.
Primer kreiranja i korišćenja klasa u programu?
Analiziraćemo sledeći program Classes, kako bi ste razumeli kako se klase prave i koriste. Klase su same po sebi veoma kompleksna tema za učenje, sadrži mnoštvo novih i stranih pojmova isto kao što sadrži i mnoštvo mogućnosti. Tako da je ovaj primer samo mali i jednostavni deo onoga što zovemo klase. Osnovno što treba da znate kada kreirate klase u Visual Studio-u, to se radi preko Solution Explorer-a, desnim klikom miša na naziv projekta, zatim na Add i na Class. Vama se na taj način omogućava da uvezete klasu u posebnom fajlu u vaš projekat sa istim nazivom kakav ste naziv dali klasi. Pogledajte sliku, kako da kreirate klasu. Posle vi izmenom koda određujete da li je klasa statična, javna ili nasleđuje neku klasu ili interfejse.
( Kreiranje klasa u Visual Studio 2015 )
Program Classes sadrži 3 klase. Prve dve klase, Person1 i Person2 su iste dve klase, to se nikad ne radi; ovde postoje u programu da bi ste videli kako su iskodirane na drugačiji način i znali razliku. Treća klasa je Student i ona je specifična po tome što nasleđuje klasu Person1. Pogledajte prvo kod celog programa kao celu celinu, da bi ga lakše analizirali.
class Person1
{
public string firstName;
public string lastName;
public string FullName()
{
return firstName + " "
+ lastName;
}
}
class Person2
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName()
{
return FirstName + " "
+ LastName;
}
public Person2 (string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
class Student : Person1
{
public string Department { get; set; } = "Mathematics";
}
using System;
using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Classes
{
class Program
{
static void Main(string[] args)
{
bool
correct = false;
string firstName, lastName;
do
{
Write("Your first name:
");
firstName = ReadLine();
} while (correct = String.IsNullOrWhiteSpace(firstName));
do
{
Write("Your last name:
");
lastName = ReadLine();
} while (correct = String.IsNullOrWhiteSpace(lastName));
Person1 person1 = new Person1();
person1.firstName = firstName;
person1.lastName = lastName;
WriteLine( Environment.NewLine + "Person class with
fields (variables):"
+ Environment.NewLine +
person1.FullName());
Person2 person2 = new Person2(firstName, lastName);
WriteLine(Environment.NewLine + "Person class with the
constructor and properties (auto-properties):" + Environment.NewLine +
person2.FullName());
Student student = new Student();
student.firstName = firstName;
student.lastName = lastName;
WriteLine(Environment.NewLine + "Student class inheritance Person1
class" + Environment.NewLine +
"without input the
department information:" + Environment.NewLine +
student.FullName() + Environment.NewLine + student.Department);
student.Department = "Informatics";
WriteLine(Environment.NewLine + "Student class
inheritance Person1 class" + Environment.NewLine +
"where the department
is inicialize with \"Informatics\"." + Environment.NewLine +
student.FullName() + Environment.NewLine + student.Department);
ReadKey();
}
}
}
Person1 person1 = new Person1();
person1.firstName = firstName;
person1.lastName = lastName;
Person1 person1;
person1 = new Person1();
person1.firstName = firstName;
person1.lastName = lastName;
public string FirstName { get; set; }
public string LastName { get; set; }
Bez auto propertija, kod samo properija bi izgledao ovako:
private string _firstName;
public string FirstName
{
get
{
return _firstName;
}
set
{
_firstName = value;
}
}
private string _lastName;
public string LastName
{
get
{
return _lastName;
}
set
{
_lastName = value;
}
}
public int
FirstNameLenght { get; }
Person2 person2 = new Person2(firstName, lastName);
class Student : Person1
public string Department { get; set; } = "Mathematics";
To u predhodnim verzijama niste mogli. Ako se pitate zašto bi ste to radili, odgovor je jednostavan. Možda vam treba neka defaultna vrednost kad korisnik ne unese ni jedan podatak. Navedeni program prikazuje da student priprada odeljenju matematike, ukoliko nije navedena drugačija vrednost. Kad pokrenete navedeni program rezultat je sličan u zavisnosti od imena i prezimena koje je student uneo kao vrednost.
Your first name: Manuel
Your last name: Radovanovic
Person class with fields (variables):
Manuel Radovanovic
Person class with the constructor and properties (auto-properties):
Manuel Radovanovic
Student class inheritance Person1 class
without input the department information:
Manuel Radovanovic
Mathematics
Student class inheritance Person1 class
where the department is inicialize with "Informatics".
Manuel Radovanovic
Informatics
Kako to sve izgleda možete pogledati i na video-u:
( C# 6.0 Tutorial - Fundamentals - 23. Classes )
klasa: class Ucenik
ReplyDelete{
dugmici: private void button1_Click(object sender, EventArgs e)
{
string marka = textBox1.Text;
string model = textBox2.Text;
int cena = int.Parse(textBox3.Text);
lista.Add(new Automobil(marka, model, cena));
updateListBox();
}
private void button2_Click(object sender, EventArgs e)
{
string marka = textBox1.Text;
string model = textBox2.Text;
int cena = int.Parse(textBox3.Text);
int index = lista.FindIndex(i => i.Marka == marka && i.Model == model && i.Cena == cena);
lista.RemoveAt(index);
updateListBox();
}
public TIme Ime;
public TOcena Ocena;
public Ucenik(TIme ime, TOcena ocena)
{
this.Ime = ime;
this.Ocena = ocena;
}
}
lista: public partial class Form1 : Form
{
List> lista = new List>();
public Form1()
{
InitializeComponent();
}
recnik: public partial class Form1 : Form
{
Dictionary> recnik = new Dictionary>();
public Form1()
{
InitializeComponent();
cbDay.SelectedIndex = 0;
}