Primer: Klasa Tacka Staticka polja i staticke metode...// provera rezultata za instanciranje objekta...

3
Uvod u Objektno Programiranje /// VPTŠ Užice /// Milovan Milivojević / Đorđe Forst /// 2014 Izvodi: Microsoft Visual C#2012, John Sharp, CET:Portabilis, Beograd,2013 .... 1 | UOP/mm/df/14 Primer: Klasa Tacka.... Staticka polja i staticke metode Zadatak: Kreirati formu kao na slici. Kreirati klasu Tacka sa poljima x i y koja predstavljaju koordinate tačke u 2D. Klasa treba da sadrži sledeće metode: podrazumevani konstruktor x=0, y=0 preklopljeni konstruktor koji preuzima koordinate iz Text polja instancnu metodu Rastojanje koja računa rastojanje između dve tačke Statičku metodu UkupnoTacaka koja vraća vrednost statičke javne varijable brojacTacaka Na Formi programirati Clik događaje za sledeća dugmad: xOy – poziva podrazumevani konstruktor klase Tacka da ispiše koordinate koordinatnog početka Rastojanje OA – instancira objekte O i A (koordinatni početak i tačku A) i izračunava i prikazuje rastojanje OA korišćenjem metode Rastojanje klase Tacka. Rastojanje OB – instancira objekte O i B (koordinatni početak i tačku B) i izračunava i prikazuje rastojanje OA korišćenjem metode Rastojanje klase Tacka. Rastojanje AB – instancira objekte O, A i B (koordinatni početak i tačke A i B) i izračunava i prikazuje rastojanje AB korišćenjem metode Rastojanje klase Tacka. Brojac tačaka – prikazuje broj ukupno kreiranih instanci (objekata) tipa Tacka

Transcript of Primer: Klasa Tacka Staticka polja i staticke metode...// provera rezultata za instanciranje objekta...

  • Uvod u Objektno Programiranje /// VPTŠ Užice /// Milovan Milivojević / Đorđe Forst /// 2014 Izvodi: Microsoft Visual C#2012, John Sharp, CET:Portabilis, Beograd,2013 ....

    1 | U O P / m m / d f / 1 4

    Primer: Klasa Tacka.... Staticka polja i staticke metode

    Zadatak: Kreirati formu kao na slici. Kreirati klasu Tacka sa poljima x i y koja predstavljaju koordinate tačke u 2D. Klasa treba da sadrži sledeće metode:

    podrazumevani konstruktor x=0, y=0

    preklopljeni konstruktor koji preuzima koordinate iz Text polja

    instancnu metodu Rastojanje koja računa rastojanje između dve tačke

    Statičku metodu UkupnoTacaka koja vraća vrednost statičke javne varijable brojacTacaka

    Na Formi programirati Clik događaje za sledeća dugmad:

    xOy – poziva podrazumevani konstruktor klase Tacka da ispiše koordinate koordinatnog početka

    Rastojanje OA – instancira objekte O i A (koordinatni početak i tačku A) i izračunava i prikazuje rastojanje OA korišćenjem metode Rastojanje klase Tacka.

    Rastojanje OB – instancira objekte O i B (koordinatni početak i tačku B) i izračunava i prikazuje rastojanje OA korišćenjem metode Rastojanje klase Tacka.

    Rastojanje AB – instancira objekte O, A i B (koordinatni početak i tačke A i B) i izračunava i prikazuje rastojanje AB korišćenjem metode Rastojanje klase Tacka.

    Brojac tačaka – prikazuje broj ukupno kreiranih instanci (objekata) tipa Tacka

  • Uvod u Objektno Programiranje /// VPTŠ Užice /// Milovan Milivojević / Đorđe Forst /// 2014 Izvodi: Microsoft Visual C#2012, John Sharp, CET:Portabilis, Beograd,2013 ....

    2 | U O P / m m / d f / 1 4

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Windows.Forms;

    namespace Olimp52_Tacka

    {

    static class Program

    {

    ///

    /// The main entry point for the application.

    ///

    [STAThread]

    static void Main()

    {

    Application.EnableVisualStyles();

    Application.SetCompatibleTextRenderingDefault(false);

    Application.Run(new Form1());

    }

    }

    }

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data;

    using System.Drawing;

    using System.Linq;

    using System.Text;

    using System.Windows.Forms;

    namespace Olimp52_Tacka

    {

    public partial class Form1 : Form //

    {

    public Form1()

    {

    InitializeComponent();

    }

    private void btnKoordinatniPocetak_Click(object sender, EventArgs e)

    {

    Tacka O = new Tacka(); // a) probati kada ne postoji podrazumevani kons.

    //Provera rezultata za gradnju objekta sa podrazumevanim konstruktorom

    string pocetak= "[" + O.x + ","+ O.y+"]";

    lblKoordinatniPocetak.Text ="Koordinatni pocetak O:"+pocetak;

    }

    private void btnRastojanjeOA_Click(object sender, EventArgs e)

    {

    Tacka O = new Tacka();

    Tacka A = new Tacka(double.Parse(txtAx.Text), double.Parse(txtAy.Text));

    // provera rezultata za instanciranje objekta sa preklopljenim konstruktorom

    double rastojanje = O.Rastojanje(A);

    lblRastojanjeOA.Text = "Rastojanje OA: " + rastojanje;

    }

    private void btnRastojanjeOB_Click(object sender, EventArgs e)

    {

    Tacka O = new Tacka();

    Tacka B = new Tacka(double.Parse(txtBx.Text), double.Parse(txtBy.Text));

    // provera rezultata za instanciranje objekta sa preklopljenim konstruktorom

    double rastojanje = O.Rastojanje(B);

    lblRastojanjeOB.Text = "Rastojanje OB: " + rastojanje;

    }

    private void btnRastinajeAB_Click(object sender, EventArgs e)

    {

    Tacka O = new Tacka();

    Tacka A = new Tacka(double.Parse(txtAx.Text), double.Parse(txtAy.Text));

    Tacka B = new Tacka(double.Parse(txtBx.Text), double.Parse(txtBy.Text));

    // provera rezultata za instanciranje objekta sa preklopljenim konstruktorom

    double rastojanje = A.Rastojanje(B);

    lblRastojanjeAB.Text = "Rastojanje AB: " + rastojanje;

    }

  • Uvod u Objektno Programiranje /// VPTŠ Užice /// Milovan Milivojević / Đorđe Forst /// 2014 Izvodi: Microsoft Visual C#2012, John Sharp, CET:Portabilis, Beograd,2013 ....

    3 | U O P / m m / d f / 1 4

    private void btnBrojacTacaka_Click(object sender, EventArgs e)

    {

    lblBrojacTacaka.Text = "Ukupan broj tacaka: " + Tacka.UkupnoTacaka();

    }

    }

    }

    Program za klasu Tacka

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    namespace Olimp52_Tacka

    {

    class Tacka

    {

    public double x, y;

    private static int brojacTacaka=0;

    public Tacka(double xfik, double yfik)//preklopljeni konstruktor

    {

    this.x = xfik;

    this.y = yfik;

    brojacTacaka++;

    }

    public Tacka() // a) pokusati F6 - Build bez ovog podrazumevanog konstruktora

    {

    this.x = 0.0;

    this.y = 0.0;

    brojacTacaka++;

    }

    public double Rastojanje(Tacka BiloKoja)

    {

    double xRazlika = this.x - BiloKoja.x;

    double yRazlika = this.x - BiloKoja.y;

    /*Objasnjenje za this: Polje x od objekta (a to je objekat A odnosno instanca A)

    * , koji je kreiran po sablonu...klasi Tacka, a koji je pozvao metodu Rasrojanje

    * u glavnom programu za dogadjaj Click

    */

    double razdaljina = Math.Sqrt(xRazlika * xRazlika + yRazlika * yRazlika);

    return razdaljina;

    }

    /* da ne bi bio narusen koncept enkapsulacije bolje je kreirati staticku metodu

    koja cita daje vrednost privatnog polja brojacTacaka nego da je polje

    * brojacTacaka bilo public. Zasto bi se time narusio koncept enkapsulacije?

    * Zato, sto bi svako sa drugog mesta iz programa mogao da promeni vrednost

    * za brojacTacaka.

    * Los primer je prethodni projekat sa krugovima!!! */

    public static int UkupnoTacaka()

    {

    return brojacTacaka;

    }

    //Posto je ovo staticka metoda onda se ona u glavnom programu moze

    //pozvati direktno preko klase Tacka bez kreiranja objekta tipa Tacka

    }

    }