Diskuze: OOP
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


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.
Pošli to znova Ten
nečitelný mažu
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
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;
}
}
}
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
.
Takže když tvořit instanci tak pouze jednu a pojmenovat ji nějak chytře
Matematika operace=new Matematika();
David Hartinger:8.4.2013 19:03
Je vidět, že s objekty začínáš, takže na statiku zatím úplně zapomeň.
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;
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;
}
}
}
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 To jsme dělali v prváku zhruba v
tomto období (celkem sranda
)
Udělat třeba jednoduchý úkolníček
Pro další inspiraci http://www.itnetwork.cz/…-programator
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?
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
Zobrazeno 15 zpráv z 15.