Visual Model For F# – Przykład 2

Rozbudowane dziedziczenie  – przykład 2

W tym przykładzie został zamodelowany program (rysunek 1), który posiada kilka klas/typów oraz związki dziedziczenia między nimi.

Na przedstawionym diagramie widać typ o nazwie Shape, który został oznaczony jako abstrakcyjny. Ten typ symbolizuje abstrakcyjny kształt. W tej klasie została zdefiniowana abstrakcyjna metoda Area, która będzie zwracała podstawowy typ float. Metoda ta dla każdej z klas dziedziczących będzie musiała być nadpisana (ang. override). Środowisko Microsoft Visual Studio 2010 jeszcze przez kompilacją programu podpowie użytkownikowi, że metoda Area powinna być zdefiniowana w każdej klasie, która dziedziczy po abstrakcyjnym elemencie Shape.

Kolejnymi typami, jakie widać na rysunku 1, są: typ Circle symbolizujący koło, Square symbolizujący kwadrat oraz Triangle symbolizujący trójkąt. Każda z klas ma nadpisaną metodę Area, a użyte do tego zostało słowo kluczowe override. Dodatkowo klasa Circle ma zdefiniowaną właściwość o nazwie pi, która będzie przechowywała przybliżenie liczby pi potrzebnej do obliczenia pola powierzchni.

Każda z trzech klas pochodnych od klasy Shape w inny sposób liczy pole powierzchni danej figury. W modelu zostały zdefiniowane trzy bloki kodu o nazwach CodeBlockForCircle, CodeBlockForSquare oraz CodeBlockForTriangle, które zostały uzupełnione o odpowiedni kod.

Przykład związany z dziedziczeniem

Rysunek 1: Przykład związany z dziedziczeniem

Na poniższym listingu 1 widoczny jest wygenerowany kod źródłowy na podstawie powyższego modelu.

Kod jest odpowiednio sformatowany i nadaje się do kompilacji, jeśli użytkownik uzupełni odpowiednie sekcje do oraz let. Kod będzie można skompilować nawet wtedy, gdy sekcja let w klasie Circle zostanie tylko ręcznie uzupełniona, a sekcje do zostaną wszędzie usunięte.

Widać, że każda z nadpisanych metod do obliczania pola powierzchni ma ciało, które jest zgodne z tym, co jest zawarte w odpowiednich blokach kodu.

Dzięki wtyczce można w prosty sposób modelować hierarchię klas. Projektując model, użytkownik koncentruje się na projekcie i w ten sposób popełnia mniej błędów w pisaniu kodu źródłowego.

[<AbstractClass>]
type Shape () =
  do
    //to do
  abstract member Area  : float

type Circle (r : float) =
  inherit Shape()
  let pi =
  do
    //to do
  override this.Area  =
    pi * r * r

type Square (a : float) =
  inherit Shape()
  do
    //to do
  override this.Area  =
    a * a

type Triangle (a : float,h : float) =
  inherit Shape()
  do
    //to do
  override this.Area  =
    0.5 * a * h

Listing 1: Kod źródłowy wygenerowany na podstawie modelu z rysunku 1

adamex

About Adam Bielasty

.NET Software Developer

One thought on “Visual Model For F# – Przykład 2

  1. Nice post. Its realy good. Many info help me.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *


− 3 = 1

Możesz użyć następujących tagów oraz atrybutów HTML-a:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>