Carbon + Objective-C = program

Jakiś czas temu, pokazywałem jak łatwo i przyjemnie tworzy się aplikację w oparciu o framework Cococa(Tworzenie aplikacji w Cocoa). Dziś przyszedł czas na małą demonstrację frameworka Carbon.

Ponieważ Apple radzi, by zamiast Carbon wykorzystywać Cocoa, pokażę tutaj jedynie program, który otwiera puste okno, by uwidocznić różnicę w ilości kodu, jaki trzeba zapewnić dla aplikacji w C++ na Carbon a dla aplikacji w Objective-C na Cocoa.

Główne okno projektu aplikacji na Frameworku Carbon
Główne okno projektu aplikacji na Frameworku Carbon

Już na pierwszy rzut oka widać znacznie większą ilość elementów, z których złożona jest aplikacja. Im więcej elementów – tym więcej miejsc do popełnienia błędów – tym większe prawdopodobieństwo ich popełnienia.

Główny plik aplikacji main.cpp jest wykorzystaniem klas zawartych w plikach projektu widocznych w oknie powyżej. Plik main.cpp przedstawiam poniżej.

#include <Carbon/Carbon.h> 
#include "TApplication.h" 
#include "TWindow.h" 
// Główna klasa aplikacji 
class CarbonApp : public TApplication
{
 
 public:
 
 
 CarbonApp() {}
 
 
 virtual ~CarbonApp() {}
 
 protected:
 
 
 virtual Boolean HandleCommand( const HICommandExtended& inCommand );
};
// Klasa glownego okna 
class MainWindow : public TWindow
{
 
 public:
 
 
 MainWindow() : TWindow( CFSTR("MainWindow") ) {}
 
 
 virtual ~MainWindow() {}
 
 
 static void Create();
 
 protected:
 
 virtual Boolean HandleCommand( const HICommandExtended& inCommand );
};
//---------------------------------------------------
int main(int argc, char* argv[])
{
 
 CarbonApp app;
 
  // Tworzy nowe okno 
 
  MainWindow::Create();
 
  app.Run();
 
  return 0;
}
//---------------------------------------------------
Boolean
CarbonApp::HandleCommand( const HICommandExtended& inCommand )
{
 
 switch ( inCommand.commandID ) {
 case kHICommandNew:
 
 MainWindow::Create();
 return true;
 // tutaj jest miejsce na dodawanie obsługi komend
 default:
 return false;
 
 }
}
//---------------------------------------------------
void
MainWindow::Create()
{
 
 MainWindow* wind = new MainWindow();
 
 // Ustawienie pozycji okna do wyświetlania 
 
 RepositionWindow( *wind, NULL, kWindowCascadeOnMainScreen );
 
 // Okno zostało stworzone, teraz należy je pokazać 
 
 wind->Show();
}
//--------------------------------------------------- 
Boolean
MainWindow::HandleCommand( const HICommandExtended& inCommand ) {
 
 switch ( inCommand.commandID ) {
 // Tutaj jest miejsce na obsługę komend 
 default:
 return false;
 
 }
}

Porównując zawartość tego pliku do 4 linijek aplikacji Cocoa widać znaczną różnicę, prawda? Znacznie prościej jest ogarnąć aplikację w Cocoa. Zaznczam też, że nie przedstawiłem tutaj implementacji tych klas, które są wykorzystywane w pliku main.cpp, a które są włączone do projektu od samego początku.

Dodaj komentarz

This site uses Akismet to reduce spam. Learn how your comment data is processed.