Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar

Člen
Avatar
:7.4.2013 21:03

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
Odpovídá na
Drahomír Hanák:7.4.2013 21:13

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
7.4.2013 21:13
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:8.4.2013 8:43

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
Tvůrce
Avatar
Kit:8.4.2013 18:04

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
Tvůrce
Avatar
Petr Nymsa:8.4.2013 18:10

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

Nahoru Odpovědět
8.4.2013 18:10
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar

Člen
Avatar
:8.4.2013 18:44
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

Člen
Avatar
:8.4.2013 18:59

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
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:8.4.2013 19:01

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 Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:8.4.2013 19:03

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
You are the greatest project you will ever work on.
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na
Honza Bittner:8.4.2013 19:04

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
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar

Člen
Avatar
:8.4.2013 19:07

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
8.4.2013 19:07
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:8.4.2013 19:26

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

Člen
Avatar
:8.4.2013 19:45

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

 
Nahoru Odpovědět
8.4.2013 19:45
Avatar

Člen
Avatar
:12.4.2013 9:27
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
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:12.4.2013 9:30

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.