Dziedziczenie C# - obliczanie długości odcinka.

0

Witajcie,

Podczas nauki programowania napotkałam na problem dotyczący dziedziczenia w C#. Niestety do tej pory nie udało mi się znaleźć strony, na której temat ten był wytłumaczony z takim przykładem, abym samodzielnie mogła rozwiązać jedno zadanie, w związku z czym piszę tutaj, na forum.

Początkowo celem zadania było stworzenie klasy Punkt, zawierającej konstruktor, metodę umożliwiającą przesunięcie go o wybrane przez użytkownika współrzędne i ostatecznie wyświetlenie nowych współrzędnych.

Udało mi się to co prawda rozwiązać, ale chciałabym to zadanie rozwinąć dodatkowo o obliczanie długości odcinka (klasa Odcinek). I tu właśnie pojawia się problem - jak to zrobić? Jak przekazać współrzędne dwóch punktów do metody Dlugosc() i finalnie Przedstaw() co ma za zadanie przedstawić wynik w konsoli? Chciałabym jeszcze zaznaczyć, że muszą być obliczone długości co najmniej trzech odcinków, ponieważ w ostatnim etapie chciałabym wykorzystać te wartości do sprawdzenia czy punkty są współliniowe - miałaby powstać klasa Pole dziedzicząca po klasie Odcinek, gdzie będzie obliczane pole trójkąta ze wzoru Herona.

Mam jednak nadzieję, że do tego uda mi się już dojść samej na podstawie Waszych porad :).

Poniżej umieszczam kod programu, który napisałam do tej pory.

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

namespace Punkt
{
    class Punkt
    {
        protected int wsp_x;
        protected int wsp_y;
        protected double wynik;

        public Punkt(int x, int y)  //konstuktor
        {
            wsp_x = x;
            wsp_y = y;
        }

        public int przes_xa { get; set; }    //automatyczna właściwość
        public int przes_ya { get; set; }    //automatyczna właściwość

        private int Przesun_x()
        {
            return wsp_x + przes_xa;
        }

        private int Przesun_y()
        {
            return wsp_y + przes_ya;
        }

        public void Wyswietl()
        {
            Console.WriteLine("Punkt A ma tertaz współrzedne x = " + Przesun_x() + ", y = " + Przesun_y());
        }
    }

    class Odcinek : Punkt
    {
        public Odcinek(int x, int y)  //konstuktor
        {
            wsp_xa = x;
            wsp_ya = y;
        }

        private double Dlugosc()
        {
            return wynik = Math.Sqrt(Math.Pow((wsp_x - wsp_x), 2) + Math.Pow((wsp_y - wsp_y), 2));
        }

        public void Przedstaw()
        {
            Console.WriteLine("Długość odcinka wynosi " + Dlugosc());
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Podaj współrzędne punktu A");
            Console.WriteLine("Współrzędna x");
            int wsp_xa = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Współrzędna y");
            int wsp_ya = Convert.ToInt32(Console.ReadLine());

            Punkt punktA = new Punkt(wsp_xa, wsp_ya);

            Console.WriteLine("Podaj o ile chcesz przesunąć punkt A");
            Console.WriteLine("Przesunięcie wzdłuż osi x");
            punktA.przes_xa = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Przesunięcie wzdłuż osi y");
            punktA.przes_ya = Convert.ToInt32(Console.ReadLine());

            punktA.Wyswietl();

            Console.WriteLine("Podaj współrzędne punktu B");
            Console.WriteLine("Współrzędna x");
            int wsp_xb = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Współrzędna y");
            int wsp_yb = Convert.ToInt32(Console.ReadLine());

            Punkt punktB = new Punkt(wsp_xb, wsp_yb);

            Console.WriteLine("Podaj współrzędne punktu C");
            Console.WriteLine("Współrzędna x");
            int wsp_xc = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Współrzędna y");
            int wsp_yc = Convert.ToInt32(Console.ReadLine());

            Punkt punktC = new Punkt(wsp_xc, wsp_yc);

            Console.ReadKey();
        }
    }
}

Pozdrawiam i z góry dziękuję za pomoc! :)

1

Czemu klasa Odcinek dziedziczy po punkcie?
Moim zdaniem nie powinna, za to powinna w konstruktorze przyjmować 2 punkty i na ich podstawie wyliczać długość odcinka.

0

Ogólnie to chciałam po prostu przećwiczyć dziedziczenie w C# i dlatego tak zrobiłam.
Poza tym prawdę powiedziawszy nigdy do tej pory nie spotkałam się z tym, żeby konstruktor przyjmował wartości dwóch punktów, ale skoro tak się da, to zaraz spróbuję i zobaczę co mi wyjdzie.

1

wg mnie masz źle rozplanowaną klasę punkt - metoda przesun powinna przyjmować przesunięcie i aktualizować położenie wsp_ a nie zwracać sumę położenia i przesunięcia.
właściwości przes_xa i przes_ya są wzięte z tyłka.
metoda wyświetl powinna wyświetlać punkt a nie wywoływać dziwne metody

Może zacznij najpierw od poprawnej klasy punkt, a potem dopiero linia. I jak mówił poprzednik linia powinna się składać z dwóch punktów, co nie oznacza, że w konstruktorze trzeba przekazywać dwa punkty a zamiast tego można 4 współrzędne. Można nawet napisać dwa konstruktory - jeden z 4 wsp i jedne z 2 pkt

BTW obliczanie odległości powinno być w klasie linia a nie punkt

0

Zrezygnowałam z dziedziczenia i w konstruktorze zdefiniowałam cztery współrzędne. Tym sposobem działa.
Dzięki wielkie za pomoc :)

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