Avatar
idosperk
Člen
Avatar
idosperk:

ahoj můžete mi někdo posoudit jestli je tento kód napsaný správně v OOP?

using System;
using System.Collec­tions.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
do
{
Console.Clear();
Scitani scitani = new Scitani();
Odcitani odcitani = new Odcitani();
Nasobeni nasobeni = new Nasobeni();
Deleni deleni = new Deleni();
Console.Write("za­dejte prvni cislo: ");
double a = double.Parse(Con­sole.ReadLine());
Console.Write("za­dejte znamenko: ");
char znamenko = char.Parse(Con­sole.ReadLine());
Console.Write("za­dejte drue cislo: ");
double b = double.Parse(Con­sole.ReadLine());
switch (znamenko)
{
case '+':
Console.Write­Line("Vysledek je: {0}", Scitani.Secte(a, b));
break;
case '-':
Console.Write­Line("Vysledek je: {0}", Odcitani.Odecte(a, b));
break;
case '*':
Console.Write­Line("Vysledek je: {0}", Nasobeni.Nasobi(a, b));
break;
case '/':
Console.Write­Line("Vysledek je: {0}", Deleni.Deli(a, b));
break;
}
Console.Write("Chce­te pokračovat? [ano/ne]: ");
} while (Console.Read­Line().ToLower() == "ano");
Console.ReadLine();
}
}
class Scitani
{
public static double Secte(double a, double b)
{
return a + b;
}
}
class Odcitani
{
public static double Odecte(double a, double b)
{
return a - b;
}
}
class Nasobeni
{
public static double Nasobi(double a, double b)
{
return a * b;
}
}
class Deleni
{
public static double Deli(double a, double b)
{
return a / b;
}
}

}

 
Odpovědět 7.4.2013 21:03
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na idosperk
Drahomír Hanák:

Už jenom ten názve namespace bije do očí ;) Proč vytvářet instance třídy, když pak stejně používáš statické metody? Ty operace bcyh udělal jako Utility. Tzn. nějakou statickou třídu MatematickeOperace a v ní metody Vynásob, Vyděl, Sečti, Odečti.

 
Nahoru Odpovědět  +4 7.4.2013 21:13
Avatar
Kit
Redaktor
Avatar
Odpovídá na idosperk
Kit:

Podle mne to s OOP nemá mnoho společného. Klasický procedurální styl.

Nahoru Odpovědět 8.4.2013 8:43
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Kit:

Mohl bys to sem posílat jako výpis zdrojového kódu? Druhé tlačítko zprava. Tohle nebudu číst.

Nahoru Odpovědět 8.4.2013 18:04
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:

Pošli to znova :) Ten nečitelný mažu

Nahoru Odpovědět  +1 8.4.2013 18:10
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
idosperk
Člen
Avatar
idosperk:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Matematika
{
    class Program
    {
        static void Main(string[] args)
        {
            do
            {
                Console.Clear();
                Console.Write("zadejte prvni cislo: ");
                double a = double.Parse(Console.ReadLine());
                Console.Write("zadejte znamenko: ");
                char znamenko = char.Parse(Console.ReadLine());
                Console.Write("zadejte drue cislo: ");
                double b = double.Parse(Console.ReadLine());
                switch (znamenko)
                {
                    case '+':
                        Console.WriteLine("Vysledek je: {0}",Matematika.Secte(a,b));
                       break;
                    case '-':
                        Console.WriteLine("Vysledek je: {0}",Matematika.Odecte(a,b));
                        break;
                    case '*':
                        Console.WriteLine("Vysledek je: {0}",Matematika.Nasobi(a,b));
                        break;
                    case '/':
                        Console.WriteLine("Vysledek je: {0}",Matematika.Deli(a,b));
                        break;
                }
                Console.Write("Chcete pokračovat? [ano/ne]: ");
            } while (Console.ReadLine().ToLower() == "ano");
            Console.ReadLine();
        }
    }
    class Matematika
    {
        public static double Secte(double a, double b)
        {
            return a + b;
        }
        public static double Odecte(double a, double b)
        {
            return a - b;
        }
        public static double Nasobi(double a, double b)
        {
            return a * b;
        }
        public static double Deli(double a, double b)
        {
            return a / b;
        }
    }

}

sorry :D

 
Nahoru Odpovědět 8.4.2013 18:44
Avatar
idosperk
Člen
Avatar
idosperk:

A je to správně bez použití statických metod?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Matematika
{
    class Program
    {
        static void Main(string[] args)
        {
            do
            {
                Console.Clear();
                Matematika Secte = new Matematika();
                Matematika Odecte = new Matematika();
                Matematika Nasobi = new Matematika();
                Matematika Deli = new Matematika();
                Console.Write("zadejte prvni cislo: ");
                double a = double.Parse(Console.ReadLine());
                Console.Write("zadejte znamenko: ");
                char znamenko = char.Parse(Console.ReadLine());
                Console.Write("zadejte drue cislo: ");
                double b = double.Parse(Console.ReadLine());
                switch (znamenko)
                {
                    case '+':
                        Console.WriteLine("Vysledek je: {0}",Secte.Scitani(a,b));
                        break;
                    case '-':
                        Console.WriteLine("Vysledek je: {0}",Odecte.Odcitani(a,b));
                        break;
                    case '*':
                        Console.WriteLine("Vysledek je: {0}",Nasobi.Nasobeni(a,b));
                        break;
                    case '/':
                        Console.WriteLine("Vysledek je: {0}",Deli.Deleni(a,b));
                        break;
                }
                Console.Write("Chcete pokračovat? [ano/ne]: ");
            } while (Console.ReadLine().ToLower() == "ano");
            Console.ReadLine();
        }
    }
    public class Matematika
    {
        public double Scitani(double a, double b)
        {
            return a + b;
        }
        public double Odcitani(double a, double b)
        {
            return a - b;
        }
        public double Nasobeni(double a, double b)
        {
            return a * b;
        }
        public double Deleni(double a, double b)
        {
            return a / b;
        }
    }
}
 
Nahoru Odpovědět 8.4.2013 18:59
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na idosperk
Petr Nymsa:

První příklad by celkem šel :). Ale co je to druhé ? FUJ ! Proč 4x zakládat objekt ? Schválně se koukni že tvůj objekt odecte obshuje i metody jako Scitani, Nasobeni ... to asi není úplně v pořádku 8-). Takže když tvořit instanci tak pouze jednu a pojmenovat ji nějak chytře

Matematika operace=new Matematika();
Nahoru Odpovědět 8.4.2013 19:01
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na idosperk
David Čápka:

Je vidět, že s objekty začínáš, takže na statiku zatím úplně zapomeň.

Editováno 8.4.2013 19:03
Nahoru Odpovědět 8.4.2013 19:03
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Honza Bittner
Redaktor
Avatar
Odpovídá na idosperk
Honza Bittner:

Na co vypisuješ :

Matematika Secte = new Matematika();
Matematika Odecte = new Matematika();
Matematika Nasobi = new Matematika();
Matematika Deli = new Matematika();

když s tim pak stejně dál nepracuješ ? ...

stačilo by

Matematika operace = new Matematika();

a pak v kódu :

case '+':
                         Console.WriteLine("Vysledek je: {0}",operace.Scitani(a,b));
                         break;
                     case '-':
                         Console.WriteLine("Vysledek je: {0}",operace.Odcitani(a,b));
                         break;
Nahoru Odpovědět 8.4.2013 19:04
Ptejte se mě na cokoli na https://github.com/HoBi/ama a followujte mě na Twitteru https://twitter.com/tenhobi. :-)
Avatar
idosperk
Člen
Avatar
idosperk:

Mate pravdu snazim se pochopit jak funguji objekty. Jinak diky za rady :)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Matematika
{
    class Program
    {
        static void Main(string[] args)
        {
            do
            {
                Console.Clear();
                Matematika operace = new Matematika();
                Console.Write("zadejte prvni cislo: ");
                double a = double.Parse(Console.ReadLine());
                Console.Write("zadejte znamenko: ");
                char znamenko = char.Parse(Console.ReadLine());
                Console.Write("zadejte drue cislo: ");
                double b = double.Parse(Console.ReadLine());
                switch (znamenko)
                {
                    case '+':
                        Console.WriteLine("Vysledek je: {0}", operace.Scitani(a, b));
                        break;
                    case '-':
                        Console.WriteLine("Vysledek je: {0}", operace.Odcitani(a, b));
                        break;
                    case '*':
                        Console.WriteLine("Vysledek je: {0}", operace.Nasobeni(a, b));
                        break;
                    case '/':
                        Console.WriteLine("Vysledek je: {0}", operace.Deleni(a, b));
                        break;
                }
                Console.Write("Chcete pokračovat? [ano/ne]: ");
            } while (Console.ReadLine().ToLower() == "ano");
            Console.ReadLine();
        }
    }
    public class Matematika
    {
        public double Scitani(double a, double b)
        {
            return a + b;
        }
        public double Odcitani(double a, double b)
        {
            return a - b;
        }
        public double Nasobeni(double a, double b)
        {
            return a * b;
        }
        public double Deleni(double a, double b)
        {
            return a / b;
        }
    }
}
 
Nahoru Odpovědět  +1 8.4.2013 19:07
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na idosperk
Petr Nymsa:

Takto už je to v pohodě :). Postupně si pročítej zdejší tutoriály ale nestačí jenom si načíst veškerou teorii, ale po každé lekci zkusit udělat 5 progámků. Už s pouhou znalostí tříd a metod, bez znalostí dědičnosti a dalších pokročilích technik můžeš vytvářet celkem zajímávé programy. Samozřejmě s dědičností apod to vytvoříš lépe, přehledněji :).
Zkus vytvoři následující programy

Lodě
Piškvorky - stačí hráč vs hráč, ale zkus i umělou inteligenci :P To jsme dělali v prváku zhruba v tomto období (celkem sranda :D )
Udělat třeba jednoduchý úkolníček

Pro další inspiraci http://www.itnetwork.cz/…-programator :)

Nahoru Odpovědět 8.4.2013 19:26
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
idosperk
Člen
Avatar
idosperk:

zkusím se pokusit :) jinak moc dík :)

 
Nahoru Odpovědět 8.4.2013 19:45
Avatar
idosperk
Člen
Avatar
idosperk:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Matematika
{
    class Program
    {
        static void Main(string[] args)
        {
            do
            {
                Console.Clear();
                Matematika operace = new Matematika();
                double prvniCislo;
                Console.Write("Zadejte prvni cislo: ");
                while (!double.TryParse(Console.ReadLine(), out prvniCislo))
                    Console.Write("Zadejte prvni cislo: ");
                char znamenko;
                Console.Write("zadejte znamenko [+,-,*,/]: ");
                char.TryParse(Console.ReadLine(), out znamenko);
                while (((znamenko != '+') && (znamenko != '-') && (znamenko != '*') && (znamenko != '/')))
                {
                    Console.Write("zadejte znamenko [+,-,*,/]: ");
                    char.TryParse(Console.ReadLine(), out znamenko);
                }
                double druheCislo;
                Console.Write("Zadejte druhe cislo: ");
                while (!double.TryParse(Console.ReadLine(), out druheCislo))
                    Console.Write("Zadejte druhe cislo: ");
                switch (znamenko)
                {
                    case '+':
                        Console.WriteLine("Vysledek je: {0}", operace.Secte(prvniCislo, druheCislo));
                        break;
                    case '-':
                        Console.WriteLine("Vysledek je: {0}", operace.Odecte(prvniCislo, druheCislo));
                        break;
                    case '*':
                        Console.WriteLine("Vysledek je: {0}", operace.Nasobi(prvniCislo, druheCislo));
                        break;
                    case '/':
                        Console.WriteLine("Vysledek je: {0}", operace.Deleni(prvniCislo, druheCislo));
                        break;
                } Console.Write("Chcete pokracovat[ano/ne]: ");
            } while (Console.ReadLine().ToLower() == "ano");
            Console.ReadLine();
        }
    }
    class Matematika
    {
        public double Secte(double prvniCislo, double druheCislo)
        {
            return prvniCislo + druheCislo;
        }
        public double Odecte(double prvniCislo, double druheCislo)
        {
            return prvniCislo - druheCislo;
        }
        public double Nasobi(double prvniCislo, double druheCislo)
        {
            return prvniCislo * druheCislo;
        }
        public double Deleni(double prvniCislo, double druheCislo)
        {
            return prvniCislo / druheCislo;
        }

    }
}

Co říkáte na tohle ošetření uživatelského vstupu? :)

 
Nahoru Odpovědět 12.4.2013 9:27
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na idosperk
Petr Nymsa:

Až na jednu věc dobrý. Objekt Matematika, char znamenko, doule prvnicislo apod, založ jednou a to před začátkem do, vypadá to líp :)

Nahoru Odpovědět 12.4.2013 9:30
Pokrok nezastavíš, neusni a jdi s ním vpřed
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.