Polimorfizam
Primeri polimorfizma
1) Polimorfizam promenljive
a)
char c;
c=’a’;
c+=5;
b)
int x;
scanf(“%d“,&x);
if(x)...
c)
Ukoliko su promenljive nad kojima se vrši neka operacija različitih tipova onda se jedna od promenljivih ponaša kao druga promenljiva.
Primer 1:
int suma=50;
float b = (float)suma/3;
Primer 2:
int a =5
float b =7.2;
float c = a+b;
Primer 3:
string str1=“Nova“;
int a = 23;
string str2 = str1+a;
2) Polimorfizam funkcija (preopterećivanje (overloading) funkcija)
U istom programu (projektu), u istoj klasi, u različitim klasama mogu da se jave funkcije sa istim nazivom. Dve različite funkcije sa istim nazivom nazivaju se preopterećene (overloaded) funkcije.
//Primer 1: funkcija zbira celih i realnih brojeva
static int Zbir(int a, int b)
{
return a + b;
}
static float Zbir(float a, float b)
{
return a + b;
}
static void Main(string[] args)
{
int a = 5;
int b = 7;
float c = 8.8f;
float d = 6.7f;
//poziva se funkcija za
//sabiranje celih brojeva
Zbir(a, b);
//poziva se funkcija
//za sabiranje realnih brojeva
Zbir(c, d);
}
Primer 2: Površina pravougaonika i kruga
static double Povrsina(double a, double b)
{
return a*b;
}
static double Povrsina(double r)
{
return Math.Pow(r,2)*Math.PI;
}static void Main(string[] args)
{
double a = 3.7;
double b = 8.2;
double r = 5.3;
//poziva se funkcija
//za racunanje povrsine pravougaonika
Povrsina(a, b);
//poziva se funkcija
//za racunanje povrsine kruga
Povrsina(r);
}Zadatak: Kod bibliotečkih funckija: Math.Max i Math.Abs proveriti koliko ima preopterećnih funckija i po čemu se te funkcije razlikuju.
3) Polimorfizam klasa
U okviru istog imenskog prostora ne mogu da postoje klase sa istim nazivom!! Klase koje imaju isti naziv a potiču iz različitih imenskih prostora se razlikuju tako što se prilikom njihovog poziva navodi i imenski prostor u kojem se nalaze.
System.Console.WriteLine();
KorisnickiImenskiProstor.Console.WriteLine();
//System,KorisnickiImenskiProstor - imenski prostori
//Console - klasa
//WriteLine() statična metoda4) Polimorfizam operatora (Preopterećenje(overloading) operatora)
Polimorfizam operatora znači to da se te jedan isti operator različito ponaša u zavisnosti od tipa operanada nad kojima se vrši operacija.
//Primer 1:
string str1 ="ucenik";
string str2 ="skola";
string str3 =srt1+str2;
//U ovom primeru operator plus
//vrši spajanje dva stringa
//Primer 2:
int a =5;
int b=7;
int c = a+b;
//U ovom primeru operator
//plus vrši sabiranje dva brojaPreopterećenje operatora (preopterećenje, overloading) je svojstvo jezika C# koje omogućava primenu standardnih operatora, kao što su +, - i * nad objektima novih, korisnički definisanih klasa.
Ovaj polimorfizam se koristi da bi se pojedostavili određeni izrazi u cilju smanjenja potencijalnih grešaka prilikom pisanja koda.
razumljivije je napisati a + b * c
nego plus(a, puta(b, c))
Zadatak1 (bez korišćenja preklopljenih operatora):
Napraviti klasu koja opisuje kompleksne brojeve. Klasa treba da ima sledeće metode: parametrizovani konstrukor, za sabiranje dva kompleksna broja, za nadodavanje kompleksnog broja i za konjugovanje kompleksnog broja.
class Kompleks
{
private double r, i;
public Kompleks(double r, double i)
{
this.r = r;
this.i = i;
}
public Kompleks Add(Kompleks z1, Kompleks z2)
{
Kompleks z3 = new Kompleks(0, 0);
z3.r = z1.r + z2.r;
z3.i = z1.i + z2.i;
return z3;
}
public void Add(Kompleks z1)
{
r += z1.r;
i += z1.i;
}
public Kompleks Konjug()
{
return new Kompleks(r, -i);
}
}static void Main(string[] args)
{
Kompleks a = new Kompleks(2, 5);
Kompleks b = new Kompleks(3, 9);
Kompleks c = new Kompleks(8, 10);
Kompleks d = new Kompleks(18, 20);
Kompleks z = new Kompleks(0, 0);
z = z.Add(a, b);
z.Add(c);
z = z.Konjug();
//kako bismo
//napisali z=a+b+c+d
z = z.Add(a, z.Add(b, z.Add(c, d)));
//prilicno neugodan i neprirodan nacin
//za pisanje koda i podlozan greskam
}Zadatak 2(korišćenjem preklopljenih operatora):
Napraviti klasu koja opisuje kompleksne brojeve. Klasa treba da ima sledeće metode: parametrizovani konstrukor, za sabiranje dva kompleksna broja, za oduzimanje dva kompleksna broja, za množenje dva kompleksna broja, za deljenje dva kompleksna broja, za proveru jednakosti dva kompleksna broja (da li su jednaki ili su različiti), za proveru različitosti (da li su različiti ili su jednaki), za konjugovanje kompleksnog broja i za ispis kompleknog broja. Za proveru napraviti sistem menija tako da se unose dva kompleksna broja. Napraviti zaštitu od deljenja sa nula kompleksnim brojem pri tome poređenje delioca obaviti sa nula kompleksnim brojem!
Console.WriteLine("\t\t\tProgram za obavljanje osnovnih aritmetičkih operacija sa kompleksnim brojevima");
Console.WriteLine("\t1)Sabiranje");
Console.WriteLine("\t2)Oduzimanje");
Console.WriteLine("\t3)Mnozenje");
Console.WriteLine("\t4)Deljenje");
Console.WriteLine("\t5)Konjugovanje");
Console.WriteLine("\t6)Provera jednakosti dva kompleksna broja");
Console.WriteLine("\t7)Provera razlicitosti dva kompleksna broja");
Console.WriteLine("\t8)Kraj programa");
Console.Write("\tOdabetite opciju:");Opšti oblik funkcije kojom se definiše novi operator je:
public static tip_vrednosti operator novi_operator(lista_argumenata)
{
}
Zadatak 2:
Napraviti klasu string. Klasa treba da ima sledeće metode: parametrizovani konstrukor, za proveru jednakosti dva stringa (da li su jednaki ili su različiti), za proveru različitosti dva stringa, da li je jedan string veći od drugog (nalazi se po abecednom redu iza), da li je jedan string manji od drugog (nalazi se po abecednom redu ispred). Za proveru napraviti sistem menija tako da se unose dva stringa.
Console.WriteLine("\t\t\tProgram za rad sa stringovima");
Console.WriteLine("\t1)Provera jednakosti dva stringa");
Console.WriteLine("\t2)Provera razlicitosti dva stringa");
Console.WriteLine("\t3)Provera da li je prvi string po abecednom redu ispred drugog stringa");
Console.WriteLine("\t4)Provera da li je prvi string po abecednom redu ispred drugog stringa ili mu je jednak");
Console.WriteLine("\t5)Provera da li je prvi string po abecednom redu iza drugog stringa");
Console.WriteLine("\t6)Provera da li je prvi string po abecednom redu iza drugog stringa ili mu je jednak");
Console.WriteLine("\t7)Kraj programa");
Console.Write("\tOdabetite opciju:");Zadatak 3:
Napraviti klasu kvadratna matrica. Klasa treba da ima atribute dimenziju matrice (tako da bude javno svojstvo) i samu matricu. Klasa treba da ima sledeće metode: parametrizovani/podrazumevani konstrukor, za unos matrice (poziva se u okviru kontrukotra), za ispis matrice, za sabiranje dve matrice, oduzimanje dve matrice, za proveru jednakosti dve matrice broja (da li su jednake ili su različite), za proveru različitosti(da li su različite ili su jednake), transponovanje matrice i množenje matrice sklarom. Za proveru napraviti sistem menija. Da bi se obavile operacije nad dve matrice one moraju da budu istih dimenzija. Tako da u tim slučajevima je potrebno uneti samo dimenziju prve matrice.
Console.WriteLine("\t\t\tProgram za obavljanje osnovnih aritmetičkih operacija nad matricama");
Console.WriteLine("\t1)Sabiranje");
Console.WriteLine("\t2)Oduzimanje");
Console.WriteLine("\t3)Provera jednakosti dve matrice");
Console.WriteLine("\t4)Provera različitosti dve matrice");
Console.WriteLine("\t5)Transponovanje matrice");
Console.WriteLine("\t6)Množenje matrice skalarom");
Console.WriteLine("\t7)Kraj programa");
Console.Write("\tOdabetite opciju:");3ITS - Polimorfizam
By lanik
3ITS - Polimorfizam
- 408