Objektno programiranje

www. youtube. / watch?v=t-4caAZKLJw
Form to form
public partial class Form1 : Form
{
public static Form1 instance;
public TextBox tb1;
public Form1()
{
InitializeComponent();
instance = this;
tb1 = textBox1;
}

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form = new Form2();
        form.Show();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        Form2.instance.lab1.Text = textBox2.Text;
    }
}

public partial class Form2 : Form
{
public static Form2 instance;
public Label lab1;
public Form2()
{
InitializeComponent();
instance = this;
lab1 = label1;
}

    private void button1_Click(object sender, EventArgs e)
    {
        Form1.instance.tb1.Text = "Ivana";
    }
}

www.youtube / watch?v=nYCMW3kfTvs
Polimorfizam
namespace Polimorfizam_c
{
class Program
{
static void Main(string[] args)
{
Matematika matematika = new Matematika();
Priroda priroda = new Priroda();
Informatika informatika = new Informatika();

        Predmet[] predmeti = { matematika, priroda, informatika };

        foreach(Predmet predmet in predmeti)
        {
            predmet.Go();
        }
        
        Console.ReadKey();
    }
}

}
class Predmet
{
public virtual void Go()
{

}

}
class Matematika:Predmet
{
public override void Go()
{
Console.WriteLine(“Matematika - dovoljan 2”);
}
}
class Priroda : Predmet
{
public override void Go()
{
Console.WriteLine(“Priroda - dovoljan 3”);
}
}
class Informatika : Predmet
{
public override void Go()
{
Console.WriteLine(“Informatika - odličan 5”);
}
}

www.youtube /watch?v=YRgcpaVkTjU
ContexMenuStrip
namespace Context_menu_strip
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    private void backgroundToolStripMenuItem_Click(object sender, EventArgs e)
    {
        using (ColorDialog cd = new ColorDialog())
        {
            if (cd.ShowDialog() == DialogResult.OK)
                button1.BackColor = cd.Color;
        }
    }

    private void foregroundToolStripMenuItem_Click(object sender, EventArgs e)
    {
        using (ColorDialog cd = new ColorDialog())
        {
            if (cd.ShowDialog() == DialogResult.OK)
                button1.ForeColor = cd.Color;
        }
    }
}

}

www.youtube watch?v=ty-OH40JDBA
Sql čitam
namespace _1_2_zad_na_dr_nacin
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    private void button1_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Ivana\Documents\sql1i2.mdf;Integrated Security=True;Connect Timeout=30");
        SqlCommand cmd1 = new SqlCommand("Select * from Table1 where [email protected]", conn);
        cmd1.Parameters.AddWithValue("@parm1", textBox1.Text);
        SqlDataReader reader1;
        conn.Open();
        reader1 = cmd1.ExecuteReader();

        if (reader1.Read())
        {
            MessageBox.Show("Pjesma: " + reader1.GetValue(1).ToString());
        }
        else
        {
            MessageBox.Show("Nije pronađeno!");
        }
        conn.Close();
    }
}

}

www. youtube watch?v=s4rsKl19b0U
Deploy množenje
namespace deploy_pomnozi2broja
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    private void button1_Click(object sender, EventArgs e)
    {
        //double f1, g1, j;
        //double.TryParse(textBox1.Text, out f1);
        //double.TryParse(textBox2.Text, out g1);
        //j = f1 * g1;
        //if (j > 0)
        //textBox3.Text = j.ToString("c").Remove(0, 1);
        decimal a = decimal.Parse(textBox1.Text);
        decimal b = decimal.Parse(textBox2.Text);
        decimal c = a * b;
        textBox3.Text = c.ToString();
    }
}

}

www.youtube watch?v=fehVTLNQorQ
Po ovom videu skidamo aplikaciju na računalo!!

Broj objekata
namespace BrObjekata
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Predmet Matematika = new Predmet();
Predmet Engleski = new Predmet();
Predmet Informatika = new Predmet();
Predmet Fizika = new Predmet();
}

    private void button1_Click(object sender, EventArgs e)
    {
        textBox1.Text = Predmet.VratiBroj().ToString();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }
}

}
to je forma, a moramo u tom za objekte napraviti i class odvojeno kao add class:
namespace BrObjekata
{
public class Predmet
{
public static int brojac = 0;
public Predmet()
{
brojac++;
}
public static int VratiBroj()
{
return brojac;
}
}
}

DataGridView kod:
namespace dgvdgv
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void StvoriGrid()
{
int brojRedaka = int.Parse(tbBrojRedaka.Text);
int brojStupaca = int.Parse(tbBrojStupaca.Text);
// Podesi broj redaka i stupaca
dataGridView1.ColumnCount = brojStupaca;
dataGridView1.RowCount = brojRedaka;
// Podesi imena stupaca
for (int i = 0; i < brojStupaca; i++)
{
dataGridView1.Columns[i].Name = "Stupac " + i.ToString();
}

        // Podesi svojstva ćelija - boja pozadine, font ...
        DataGridViewCellStyle columnHeaderStyle = new
        DataGridViewCellStyle();
        columnHeaderStyle.BackColor = Color.Beige;
        columnHeaderStyle.Font =
         new Font("Verdana", 10, FontStyle.Bold);
        dataGridView1.ColumnHeadersDefaultCellStyle =
         columnHeaderStyle;
    }
    private void button1_Click(object sender, EventArgs e)
    {
        StvoriGrid();
    }
    private void ZbrojiRedak()
    {
        //odredi indekse trenutno aktivne ćelije
        int trenutniRedak = dataGridView1.CurrentRow.Index;
        int brojStupaca = dataGridView1.Columns.Count;
        float sumaRetka = 0;
        //sumiraj redak s očitanim vrijednostima ćelija
        for (int j = 0; j < brojStupaca; j++)
        {
            sumaRetka += float.Parse
           (dataGridView1[j, trenutniRedak].Value.ToString());
        }
        //pridruži rezultat na kontrolu tbSumaStupca
        tbSumaRetka.Text = sumaRetka.ToString();
    }
    private void ZbrojiStupac()
    {
        //odredi indekse trenutno aktivne ćelije
        int trenutniStupac = dataGridView1.CurrentCell.ColumnIndex;
        int brojRedaka = dataGridView1.RowCount;
        float sumaStupca = 0;
        //sumiraj stupac s očitanim vrijednostima ćelija
        for (int i = 0; i < brojRedaka - 1; i++)
        {
            sumaStupca += float.Parse(dataGridView1[trenutniStupac,
            i].Value.ToString());
        }
        //pridruži rezultat na kontrolu tbSumaStupca
        tbSumaStupca.Text = sumaStupca.ToString();
    }
    private void button2_Click(object sender, EventArgs e)
    {
        ZbrojiRedak();
    }

    private void button3_Click(object sender, EventArgs e)
    {
        ZbrojiStupac();
    }
    private void ZbrojiSve()
    {
        int trenutniRedak = dataGridView1.CurrentRow.Index;
        int trenutniStupac = dataGridView1.CurrentCell.ColumnIndex;
        int brojRedaka = dataGridView1.RowCount;
        int brojStupaca = dataGridView1.Columns.Count;
        float suma = 0;

        for (int i = 0; i < brojRedaka - 1; i++)
        {
            for (int j = 0; j < brojStupaca; j++)
            {
                suma += float.Parse(dataGridView1[i, j].Value.ToString());
            }
        }
        ZbrojiSveTB.Text = suma.ToString();
    }
    private void button4_Click(object sender, EventArgs e)
    {
        ZbrojiSve();
    }
}

}

Sql pišem (video za projekt od nekih 15ak min)

Klasa pravokutnik:
#include
using namespace std;
class Pravokutnik
{
private:
int duzina;
int sirina;
public:
Pravokutnik()
{
duzina = 0;
sirina = 0;
}
Pravokutnik(int a)//kostruktor,zove se kao klasa,ne vraća ništa,čak ni void,kreira objekt
{
duzina = a;
sirina = 0;
}
Pravokutnik(int a, int b)
{
duzina = a;
sirina = b;
}
int vratiDuzinu()
{
return duzina;
}
int vratiSirinu()
{
return sirina;
}
void postaviDuzinu(int a)
{
duzina = a;
}
void postaviSirinu(int a)
{
sirina = a;
}
int Opseg()
{
return 2 * duzina + 2 * sirina;
}
int Povrsina()
{
return duzina * sirina;
}

};

class ZbrajanjeObjekata {
public:
int zbroji_opsege_2_prav(Pravokutnik a, Pravokutnik b)
{
return a.Opseg() + b.Opseg();
}
};

int main()
{
Pravokutnik A1(2, 3), B1(5, 4);
ZbrajanjeObjekata ZO;
cout << "zbroj opsega pravokutnika je: " << ZO.zbroji_opsege_2_prav(A1, B1) << endl;
}

MySql piši:
using MySql.Data.MySqlClient;

namespace _1_1_1_1
{
public partial class Form1 : Form
{
//MySqlConnection connection = new MySqlConnection(“datasource=localhost;port=3306;username=root;password=”);
public Form1()
{
InitializeComponent();
}

    private void button1_Click(object sender, EventArgs e)
    {
        MySqlConnection conn;
        string myconnectionString;
        myconnectionString = "server=127.0.0.1;uid=root;pwd=;database=ispit";
        conn = new MySql.Data.MySqlClient.MySqlConnection();
        conn.ConnectionString = myconnectionString;
        conn.Open();
        MySqlCommand cmd = new MySqlCommand("insert into kolegij values (@Ime,@Prezime)", conn);
        cmd.Parameters.AddWithValue("@Ime", textBox1.Text);
        cmd.Parameters.AddWithValue("@Prezime", textBox2.Text);
        cmd.ExecuteNonQuery();
        MessageBox.Show("Uspješno!");
        conn.Close();
    }
}

}

Misliš da će neko čitati ovo ?

3 Likes

Ala si razbacao kod.Daj sredi kod vec kad si pokrenuo temu.

I pitanje je?
(Minimum 20 charrrrrrrrr)

OOP je relano loše.
Ali svi koriste pa je u modi.
Naravno , kad nešto novo dođe, to je cool hipy-ima, ali kratkoročno i shvate da moraju ispočetka.
Ali zato su tu go lang i rust.
Sva sreća pa go lang nema klase i nije OOP, iako kažu da jest.
I obvezno se moraju koristiti funkcije, pa se dobije uredan code.
Da php riješi include file-ova na razini projekta, pa da se koristi import ili use, sa automatskim i minimalnim autoloadom file-ova, bilo bi odlično.

Zašto? :slight_smile:

Zato što je komplicirano.
Tu dodaj design patterne itd.
Kod funkcionalnog programiranja je sve funkcija. :slight_smile:

Pogledaj funkcionalno programiranje kako je elegantno, npr. lisp.
Nadalje go lang, kako je elegantan jezik, pa rust.

Ovaj lisp … konfuzno mi to ovako laiku izgleda. Totalno neka druga paradigma… trebalo bi vremena za prešaltati se i uopće shvatiti ga.

Go lang mi djeluje simpa i kužim ideju koncepta i kako se zaobilaze klase, tj. nudi isto na drugi način… sa dozom veće fleksibilnosti.

Ali previše fame oko OOP … pa oko Go jezika nisu niti svi suglasni jel to OOP ili nije.

Meni to izgleda sve isti vrag… ionako prije nego sam navikao koristiti klase, postizao sam isto sa funkcijama. I mogu reći točno po ovom pristupu kojom se vodi Go … znači prvi parametar mi je uvijek bio ono što je zapravo instanca klase …i onda bi ga slao okolo po metodama, tj. funkcijama i tako mu mijenjao stanje. Dobije se na kraju po funkcionalnosti vrlo sličan vrag.

Nebi zato baš tako pljuvao po OOPu, kad to što sugeriraš je slično. Barem taj Go.

I konačno, mislim da moj code nije bio ništa lošiji dok sam tako radio prije nego sam prakticirao klase … hoćem reći kvalitetu coda neće definirati jel se koriste il ne klase, nego ima puno drugih patterna koje treba znati ispoštivati kako bi code bio:

  • modularan
  • lagan za modificiranje / održavanje
  • skalabilan
  • razumljiv
    … i većinom je sva ta odgovornost na programeru, ne na alatu.

Prvi parametar odnosno skup može biti receiver.

Da bi bio ovakav code, code mora biti napisan seljački jednostavno, a te velika većina ne zna.

Pradigma je funkcionalna.

Guraju ga po OOP, da li jest ili nije, ne bitno.
Važno da nisu napravili pogrešku i dodali klase.

Nisam siguran što ti pod time spada.
Dobar code nije baš jednostavno pisati, ali je jednostavno održavati.
Dok jednostavno pisan code, uglavnom nije jednostavno održavati.
Da je tako kako ti kažeš, bolji code bi pisali svježe pečeni programeri (koji samo i znaju jednostavno) spram onih sa iskustvom.

Ali slažem se da nepotrebne komplikacije nisu potrebne…no klase same po sebi nisu to.

Onaj koji će napraviti kaos sa klasama, isto tako će napraviti kaos i u Go langu gdje nema klasa. Nisu klase krive.

Najjednostavnije što može biti.
Dobra struktura, organizacija i jednostavan code.

Ovo je isto kao želja proizvođača kamiona da naprave kamion da bude najlakši što može biti.
No opet taj kamion da bi ispunjavao svoju svrhu, mora težiti nekoliko tona.

On možda je napravljen najlakši što može biti pod uvjetom da ispuni svoju svrhu, no to ne znači da je i lagan.

Slažem se tako da i za code treba težiti najjednostavnijem mogućem, no to neće biti jednostavan code, ako mora ispunjavati iole kompleksniju svrhu.

Koje su to kompleksne stvari koje se rade u php-u?

Pričamo li o php-u ili općenito o programskom codu?