Klasy i obiekty

Przykład 2.1

Poniżej znajdziesz kod źródłowy klasy Rectangle. Klasa zawiera dwa pola (zmienne składowe) typu int, metodę (funkcję składową) inicjującą wartości tych pól oraz metodę służącą do wyznaczania pola powierzchni prostokąta. Dalej znajdziesz także kod źródłowy funkcji main() która zostanie wywołana bezpośrednio po uruchomieniu programu. Wykonane zostaną wtedy następujące czynności - deklaracja obiektu klasy Rectangle, utworzenie instancji klasy Rectangle, wywołanie metody area na rzecz utworzonego obiektu oraz wydrukowanie do standardowego wyjścia informacji o wartości jaką zwróciła ta metoda.

#import <Foundation/Foundation.h>
@interface Rectangle : NSObject
{
   int x;
   int y;
   int width;
   int height;
}

-(void)setXWith:(int)px andYWith:(int)py;
-(void)setWidthWith:(int)w andHeightWith:(int)h;

-(void)translateBy:(int)dx andBy:(int)dy;
-(int)area;

@end

#import "Rectangle.h"

@implementation Rectangle

-(void)setXWith:(int)px andYWith:(int)py
{
   self->x = px;
   self->y = py;
}

-(void)setWidthWith:(int)w andHeightWith:(int)h
{
   self->width = w;
   self->height = h;
}

-(void)translateBy:(int)dx andBy:(int)dy
{
   self->x += dx;
   self->y += dy;
}

-(int)area
{
   return self->width * self->height;
}

@end

#import <Foundation/Foundation.h>
#import "Rectangle.h"

int main(int argc, const char * argv[])
{
   @autoreleasepool
   {

      Rectangle* obj=[[Rectangle alloc] init];
      [obj setXWith:3 andYWith:7];
      [obj setWidthWith:7 andHeightWith:6];

      [obj translateBy: -1 andBy: 0];

      int k = [obj area];
      NSLog(@"Calculated area: %i", k);

   }

   return 0;
}

Ćwiczenie 2.1.1

W oparciu o informacje z wykładu zidentyfikuj te elementy, przeanalizuj cel ich użycia oraz składnię.

Ćwiczenie 2.1.2

../_images/05_05.png

Do projektu w XCode, dodaj za pomocą kreatora klasę Rectangle. Kreator utworzy dla niej szkielety plików nagłówkowego i implementacyjnego. W tym celu możesz kliknąć prawym przyciskiem myszy na folderze projektu, w panelu nawigacyjnym po lewej stronie XCode i menu kontekstowego wybierz New File, a następnie New Class. Jako typ wybierz aplikację Cocoa dla systemu OS X.

Skompiluj i przetestuj projekt.

Ćwiczenie 2.1.3

Do klasy Rectangle dodaj implementację metody obwod zwracającej obwód prostokąta oraz odpowiednie wywołanie tej metody w programie, które umożliwi przetestowanie Twojej implementacji. Skompiluj i przetestuj przykład.

Ćwiczenie 2.1.4

Napisz implementację klasy Punkt, służącej do reprezentowania punktów na płaszczyźnie. Do klasy Rectangle dodaj pole srodek, będące obiektem klasy Punkt. Dodaj odpowiednią metodę umożliwiającą zainicjowanie dodatkowego pola informacjami określającymi położenie środka danej figury na płaszczyźnie.

Ćwiczenie 2.1.5

Do Twojego projektu dodaj implementację klasy Circle, zawierającą pole reprezentujące promień okręgu oraz metody analogiczne jak w klasie Rectangle. Skompiluj i przetestuj przykład.

Ćwiczenie 2.1.6

Do klasy Rectangle dodaj implementacje metody contains sprawdzającej czy prostokąt zawiera dany punkt, reprezentowany przez obiekt klasy Point. Twoja metoda powinna przyjmować obiekt reprezentujący punkt jako parametr i zwracać wartość typu logicznego. W definicji funkcji main użyj instrukcji warunkowej, żeby przetestować Twoją metodę.

Ćwiczenie 2.1.7

Napisz klasę Ulamek. Twoja klasa powinna mieć dwa pola licznik i mianownik (zdecyduj jakiego powinny być typu), odpowiednią metodę inicjalizującą oraz metody służące do obliczania rozwinięcia dziesiętnego ułamka, do skracania ułamka oraz do dodawania i mnożenia ułamków. Napisz program umożliwiający przetestowanie Twojej klasy.

Następna część - Dziedziczenie i polimorfizm