Pomoc z odwołaniem się do metod z innych klas OOP

0

Witam!
Tak jak w temacie piszę sobie program w C#, stworzyłem kilka klass opisujących figury i w klasie głównej chce odwołać się do metod zawartych w klasach zewnętrznych i obliczyć poszczególne pola i obwody figur.


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

namespace klasy_i_metody
{
   
        class Kwadrat // klasa kwadrat
        {
            Kwadrat kwadrat = new Kwadrat();

            Kwadrat() // konstruktor
            {
                this.kwadrat = kwadrat;
            }

            ~Kwadrat() // destruktor
            {
                
            }
                        
            public double pole(double bok) // metoda na obliczanie pola figury
            {
                double wartosc;
                wartosc = (bok * bok);
                return wartosc;
            }

            public double obwod(double bok) // metoda na obliczanie obwodu figury
            {
                double wartosc;
                wartosc = 4 * bok;
                return wartosc;

            }

          
        }

        class Prostokat // klasa prostokat
        {
            Prostokat prostokat = new Prostokat();

            Prostokat() // konstruktor
            {
                this.prostokat = prostokat; 
            }

            ~Prostokat() // destruktor
            {

            }

            public double pole(double bok1, double bok2) // metoda na obliczanie pola figury
            {
                double wartosc;
                wartosc = (bok1 * bok2);
                return wartosc;
            }

            public double obwod(double bok1, double bok2) // metoda na obliczanie obwodu figury
            {
                double wartosc;
                wartosc = 2 * bok1 + 2 * bok2;
                return wartosc;

            }

        }

        class Kolo // klasa kolo
        {
            Kolo kolo = new Kolo();

            Kolo() // konstruktor
            {
                this.kolo = kolo;
            }

            ~Kolo() // destruktor
            {

            }

            public double pole(double promien) // metoda na obliczanie pola figury
            {
                const double PI = 3.14;
                double wartosc;
                wartosc = (PI*promien*promien);
                return wartosc;
            }

            public double obwod(double promien) // metoda na obliczanie obwodu figury
            {
                const double PI = 3.14;
                double wartosc;
                wartosc = (2*PI*promien);
                return wartosc;

            }

        }

        class Trojkat // klasa trójkat
        {
            Trojkat trojkat = new Trojkat();

            Trojkat() // konstruktor
            {
                this.trojkat = trojkat;
            }

            ~Trojkat() // destruktor
            {

            }

            public double pole(double bok1, double wysokosc) // metoda na obliczanie pola figury
            {
                double wartosc;
                wartosc = (bok1 * wysokosc) / 2;
                return wartosc;
            }

            public double obwod(double bok1, double bok2, double bok3) // metoda na obliczanie obwodu figury
            {
                double wartosc;
                wartosc = (bok1 + bok2 + bok3);
                return wartosc;
            }
            

        }

        class Trapez // klasa trapez
        {
            Trapez trapez = new Trapez();

            Trapez() // konstruktor
            {
                this.trapez = trapez;
            }

            ~Trapez() // destruktor
            {

            }

            public double pole(double bok1, double bok2, double wysokosc) // metoda na obliczanie pola figury
            {
                double wartosc;
                wartosc = ((bok1 + bok2) * wysokosc) / 2;
                return wartosc;
            }

            public double obwod(double bok1, double bok2, double bok3, double bok4) // metoda na obliczanie obwodu figury
            {
                double wartosc;
                wartosc = (bok1 + bok2 + bok3 + bok4);
                return wartosc;
            }


        }

        class Romb // klasa romb
        {
            Romb romb = new Romb();

            Romb() // konstruktor
            {
                this.romb = romb;
            }

            ~Romb() // destruktor
            {

            }

            public double pole(double bok, double wysokosc) // metoda na obliczanie pola figury
            {
                double wartosc;
                wartosc = bok * wysokosc;
                return wartosc;
            }

            public double obwod(double bok) // metoda na obliczanie obwodu figury
            {
                double wartosc;
                wartosc = (4 * bok);
                return wartosc;
            }

        }

        class Rownoleglobok // klasa rownoleglobok
        {
            Rownoleglobok rownoleglobok = new Rownoleglobok();

            Rownoleglobok() // konstruktor
            {
                this.rownoleglobok = rownoleglobok;
            }

            ~Rownoleglobok() // destruktor
            {

            }

            public double pole(double bok, double wysokosc) // metoda na obliczanie pola figury
            {
                double wartosc;
                wartosc = (bok * wysokosc);
                return wartosc;
            }

            public double obwod(double bok1, double bok2) // metoda na obliczanie obwodu figury
            {
                double wartosc;
                wartosc = (2 * bok1 + 2 * bok2);
                return wartosc;
            }

        }



    }


    class MainClass
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Obliczamy pola i obwody figur!");
            Console.WriteLine(" ");

            


                        
                      


            System.Console.ReadLine();
        }
    }


 

Chciałem w MainClass stworzyc sobie obiekt np

 Kwadrat k = new Kwadrat(); 

ale pisze ,że nie ma takiej przestrzeni nazw o nazwie kwadrat xd

"Error 8 The type or namespace name 'Kwadrat' could not be found (are you missing a using directive or an assembly reference?) C:\Users\Odyn\Desktop\C#\klasy i metody\klasy i metody\Program.cs 239"

Proszę o pomoc:)

Pozdrawiam

0

Heh wszystko przez zle umieszczenie nawiasu "}".
Już wszystko działa, Dziekuje.

3

Skoro już wrzuciłeś ten kod, trochę ponarzekam:
1)

 
~Kwadrat() // destruktor
{
 
}

Wywal te 'destruktory'` (finalizatory jeśli już), wszystkie. Nie dość że nic Ci nie dają (w C# bardzo rzadko trzeba korzystać z czegoś takiego) to jeszcze spowalniają znacznie działanie programu (przynajmniej wtedy kiedy tworzysz dużo obiektów tego typu).

  1. W C# nazwy metod się zaczyna dużą literą - może to niewielki problem (tak też będzie działać oczywiście), ale warto się tego trzymać.

  2. Troszkę to ogólnie bez sensu:

        class Kwadrat // klasa kwadrat
        {
            Kwadrat kwadrat = new Kwadrat();
 
            Kwadrat() // konstruktor
            {
                this.kwadrat = kwadrat;
            }

            public double pole(double bok) // metoda na obliczanie pola figury
            {
                double wartosc;
                wartosc = (bok * bok);
                return wartosc;
            }
 
            public double obwod(double bok) // metoda na obliczanie obwodu figury
            {
                double wartosc;
                wartosc = 4 * bok;
                return wartosc;
            }

Nie łudźmy się że to jest kod obiektowy, bardziej kod proceduralny rozrzucony po klasach...
Po pierwsze, Kwadrat kwadrat = new Kwadrat(); ta linijka jest bezsensowna, nigdzie kwadratu nie używasz.
Po drugie, this.kwadrat = kwadrat; - ta linijka jest jeszcze bardziej bezsensowna (kompilator powinien tutaj rzucać warning, przypisujesz kwadrat samemu sobie).
Po trzecie public double pole(double bok) - skoro to metoda klasy, nie powinna przyjmować parametrów, bok powinno być polem klasy.
Po czwarte

                double wartosc;
                wartosc = 4 * bok;
                return wartosc;

Niepotrzebnie tak rozpisujesz, wystarczy return 4 * bok;

Podsumowując:

        class Kwadrat // klasa kwadrat
        {
            double bok;
 
            Kwadrat(double bok) // konstruktor
            { this.bok = bok; }

            public double pole() // metoda na obliczanie pola figury
            { return bok * bok; }
 
            public double obwod() // metoda na obliczanie obwodu figury
            { return 4 * bok; }
        }

I jest krócej a na pewno sensowniej - analogicznie reszta klas ;]

A, jeszcze jedno - wszystkie klasy mają metody pole() i obwod() - dobrym pomysłem by było napisanie interfejsu IFigura który zawierałby te dwie metody właśnie.

0

Dodam, że pisanie właśnie takich klas figur jest elementarnym przykładem dziedziczenia i polimorfizmu w różnych tutorialach i książkach. Warto byłoby się z tym zapoznać, bo znacznie uprości kod.

0
msm napisał(a):

I jest krócej a na pewno sensowniej - analogicznie reszta klas ;]

No trochę sensowniej. Ale jaki niby sens ma double bok? Bok figury na pewno nie może być liczbą zmiennoprzecinkową, co innego jego długość...

0

O Panowie dziękuję za tak wylewną pomoc :)
Ja dopiero ucze sie OOP, troche tego liznołem ale w C++ a teraz przesiadłem sie na C#.
Na pewno wasze rady mi się przydają:)

Natomiast jesli chodzi o interfejsy to nie bardzo wiem o co chodzi bo jeszcze do tego nie doszedłem, ale zaraz sie w to zagłębie :)

0
somekind napisał(a):
msm napisał(a):

I jest krócej a na pewno sensowniej - analogicznie reszta klas ;]

No trochę sensowniej. Ale jaki niby sens ma double bok? Bok figury na pewno nie może być liczbą zmiennoprzecinkową, co innego jego długość...

Tak masz racje, tutaj chodzilo mi o dlugosc boku, ale nie chciałem tworzyc zmiennej dlugosc_boku tylko napisalem bok ;p

1 użytkowników online, w tym zalogowanych: 0, gości: 1