Wprowadzenie do platformy Qt
|
|
- Bronisława Wójtowicz
- 8 lat temu
- Przeglądów:
Transkrypt
1 Wprowadzenie do platformy Qt
2 Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Digia Plc. na licencji CC Digia Plc. The enclosed Qt Materials are provided under the Creative Commons Attribution-Share Alike 2.5 License Agreement. The full license text is available here: Digia, Qt and the Digia and Qt logos are the registered trademarks of Digia Plc. in Finland and other countries worldwide.
3 Qt jest platformą do tworzenia programów wieloplatformowych, napisaną w C++. Oprócz języka C++ dostępne są wiązania (ang. bindings) dla innych języków Python, Ruby, C#, etc. Oryginalnie dla graficznych interfejsów użytkownika obecnie do wszystkiego Bazy danych, XML, WebKit, multimedia, sieć, OpenGL, skrypty, bez-gui...
4 Qt składa się z modułów Wszystkie moduły posiadają podobny schemat i API QtCore QtGui QtOpenGL QtOpenVG QtSvg QtWebKit QtSql QtNetwork QtScript QtXml QtXmlPatterns Phonon QtMultimedia
5 Qt rozszerza C++ m.in. dzięki wykorzystaniu makr i introspekcji foreach (int value, intlist) { } QObject *o = new QPushButton; o->metaobject()->classname(); // returns QPushButton connect(button, SIGNAL(clicked()), window, SLOT(close())); Kod to nadal zwykły C++
6 Wieloplatformowe aplikacje budowane na podstawie jednego kodu źródłowego Aplikacje natywne z odpowiednim wyglądem i sposobem funkcjonowania Łatwe do (ponownego) wykorzystania API, wysoka produktywność, otwartość
7 Windows 10+ Mac OS X Linux/Unix X11
8 Android ios Windows Phone Platformy wbudowane
9
10 #include <QApplication> #include <QLabel> int main( int argc, char **argv ) { QApplication app( argc, argv ); QLabel l( "Hello World!" ); l.show(); return app.exec(); }
11 #include <QApplication> #include <QLabel> int main( int argc, char **argv ) { QApplication app( argc, argv ); QLabel l( "Hello World!" ); l.show(); return app.exec(); }
12 #include <QApplication> #include <QLabel> int main( int argc, char **argv ) { QApplication app( argc, argv ); QLabel l( "Hello World!" ); l.show(); return app.exec(); }
13 Dlaczego wykorzystuje się to: int main(int argc, char *argv[]) Zamiast tego? int main() Parametry argc oraz argv pozwalają na odczyt wartości podanych z linii komend Gdy wykorzystywana jest wersja bezparametrowa funkcji main(), te wartości są pomijane
14 #include <QApplication> #include <QLabel> int main( int argc, char **argv ) { QApplication app( argc, argv ); QLabel l( "Hello World!" ); l.show(); return app.exec(); }
15 #include <QApplication> #include <QLabel> int main( int argc, char **argv ) { QApplication app( argc, argv ); QLabel l( "Hello World!" ); l.show(); return app.exec(); }
16
17 LGPL za darmo Aplikacja może być otwarto-źródłowa bądź zamknięta Zmiany dokonane w Qt muszą zostać dostarczone społeczności GPL za darmo Aplikacja musi być otwarto-źródłowa Zmiany dokonane w Qt muszą zostać dostarczone społeczności Commercial trzeba płacić Aplikacja może być zamknięta Nie trzeba przekazywać społeczności dokonanych zmian w Qt
18 1991 Haavard Nord oraz Eirik Chambe- Eng rozpoczynają pracę nad Qt wspierającą X11 oraz Windows 1994 Powstanie firmy Trolltech 1996 Powstaje projekt KDE prowadzony przez Matthias a Ettrich a
19 2001 Dodano wsparcie Mac OS X 2005 Wszystkie platformy wydano pod licencją GPL 2008 Nokia przejmuje Trolltech 2009 Wsparcie dla S Wsparcie dla MeeGo 2012 Digia przejmuje platformę Qt 2014 Powstaje Qt Company 2016 Qt wersja 5.6
20 Aktualnie rozwój Qt jest nadzorowany przez firmę Qt Company: Podstawowe źródło informacji oraz możliwość pobrania:
21 QtCreator główne środowisko IDE. QtAssistant narzędzie wspomagające pracę z podpowiedziami i dokumentację, zintegrowane z QtCreator'em. QtDesigner narzędzie typu RAD, pozwalające na tworzenie warstwy wizualnej aplikacji, zintegrowane z QtCreator'em. QtLinguist narzędzie do przygotowywania różnych wersji językowych dla tworzonych programów. Konsola narzędzie typu commandline z odpowiednio ustalonymi zmiennymi środowiskowymi.
22 QObject jest klasą bazową dla niemalże wszystkich klas i widgetów Qt Implementuje wiele mechanizmów, które stanowią podstawę Qt zdarzenia sygnały i sloty właściwości zarządzanie pamięcią
23 QObject jest klasą bazową dla wielu klasy platformy Qt. Zdarzają się jednak wyjątki w następującej postaci: Klasy, które muszą posiadać minimalny narzut obliczeniowy jak te realizujące podstawowe operacje graficzne Kontenery danych (QString, QList, QChar, itp) Klasy, które mogą być kopiowane, ponieważ QObjectów nie da się skopiować.
24 Każda instancja klasy QObject jest samodzielnym indywiduum! Zwykle posiadają swoją nazwę (QObject::objectName) Mają określone miejsce w hierarchii innych instancji QObject Mogą mieć powiązania z innymi instancjami QObject
25 Qt implementuje mechanizm introspekcji w C++ Każdy QObject posiada meta object Meta object posiada informacje o: Nazwie klasy (QObject::className) Dziedziczeniu (QObject::inherits) Właściwościach Sygnałach i slotach Ogólnie o klasie (QObject::classInfo)
26 Metadane są generowane podczas procesu kompilacji przez tzw. meta object compiler (moc). Standardowy proces kompilacji i budowania w C++ źródła *.cpp kompilacja pliki obiektowe *.o łączenie pliki wykonywane dodawanie pliki nagłówkowe *.h
27 Metadane są generowane podczas procesu kompilacji przez tzw. meta object compiler (moc). Standardowy proces kompilacji i budowania w Qt źródła *.cpp kompilacja pliki obiektowe *.o łączenie pliki wykonywalne includes kompilacja pliki nagłówkowe moc wygenerowane moc_*.cpp *.h Moc generuje dane wykorzystując pliki nagłówkowe.
28 Czego szuka moc? Makro Q_OBJECT class MyClass : public QObject { Q_OBJECT Q_CLASSINFO("author", "John Doe") public: MyClass(const Foo &foo, QObject *parent=0); Foo foo() const; QObject musi być dziedziczony jako pierwszy Ogólnie informacje o klasie public slots: void setfoo( const Foo &foo ); signals: void foochanged( Foo ); Słowa kluczowe Qt private: Foo m_foo; };
29 Klasy mają wiedzę o sobie (w czasie wykonywania programu) if (object->inherits("qabstractitemview")) { Umożliwia dynamiczne rzutowanie bez RTTI QAbstractItemView *view = static_cast<qabstractitemview*>(widget); view->... enum CapitalsEnum { Oslo, Helsinki, Stockholm, Copenhagen }; int index = object->metaobject()->indexofenumerator("capitalsenum"); object->metaobject()->enumerator(index)->key(object->capital()); Meta obiekt przechowuje szczegóły Umożliwia konwersję wartości wyliczeniowych na ciągi znaków Jest to przydane w przypadku łączenia Qt z językami skryptowymi
30 QObject posiada właściwości realizowane przez metody akcesora i modyfikatora Modyfikator, zwraca void, posiada jeden argument class QLabel : public QFrame { Q_OBJECT Q_PROPERTY(QString text READ text WRITE settext) public: QString text() const; public slots: void settext(const QString &); }; Akcesor, const, zwraca wartość, brak argumentów Konwencja nazewnictwa: color, setcolor Dla wartości boolowskich: isenabled, setenabled
31 Po co stosować hermetyzację? Można sprawdzić poprawność wartości: void setmin( int newmin ) { if( newmin > m_max ) { qwarning("ignoring setmin(%d) as min > max.", newmin); return; }... Można reagować na zmiany (aktualizując elementy zależne od wartości danego atrybutu) void setmin( int newmin ) {... } m_min = newmin; updateminimum();
32 Dlaczego akcesory? Separacja użytych struktur danych QSize size() const { return m_size; } int width() const { return m_size.width(); }
33 Q_PROPERTY(type name READ getfunction [WRITE setfunction] [RESET resetfunction] [NOTIFY notifysignal] [DESIGNABLE bool] [SCRIPTABLE bool] [STORED bool] [USER bool] [CONSTANT] [FINAL])
34 Dostęp bezpośredni QString text = label->text(); label->settext("hello World!"); Dostęp przez warstwę metadanych QString text = object->property("text").tostring(); object->setproperty("text", "Hello World"); Odpytywanie o właściwości w czasie wykonania int QMetaObject::propertyCount(); QMetaProperty QMetaObject::property(i); QMetaProperty::name/isConstant/isDesignable/read/write/...
35 Mechanizm ten może być wykorzystywany by dodawać właściwości w czasie działania programu: bool ret = object->setproperty(name, value); prawda jeżeli właściwość jest już zdefiniowana przez makro Q_PROPERTY QObject::dynamicPropertyNames() const fałsz jeśli dodajemy dynamicznie zwraca listę właściwości dynamicznie dodanych Może być używany np. do oznaczania obiektów
36 Makro opisujące właściwości class AngleObject : public QObject { Q_OBJECT Q_PROPERTY(qreal angle READ angle WRITE setangle) public: AngleObject(qreal angle, QObject *parent = 0); qreal angle() const; void setangle(qreal); private: qreal m_angle; }; Stan obiektu Modyfikator Akcesor Wartość początkowa
37 AngleObject::AngleObject(qreal angle, QObject *parent) : QObject(parent), m_angle(angle) Wartość { początkowa } qreal AngleObject::angle() const { return m_angle; } void AngleObject::setAngle(qreal angle) { } m_angle = angle; dosomething(); Zmień stan i zareaguj na zmianę. Akcesor po prostu zwraca wartość (ale może wykonywać bardziej skomplikowane obliczenia)
38 Standardowa deklaracja typu wyliczeniowego. Informacja, że class AngleObject : public QObject AngleMode { jest typem wyliczeniowym. Q_OBJECT Q_ENUMS(AngleMode) Q_PROPERTY(AngleMode anglemode READ...) Właściwość public: wykorzystująca enum AngleMode {Radians, Degrees}; typ wylizceniowy };...
39 QObject can have parent and children When a parent object is deleted, it deletes its children QObject *parent = new QObject(); QObject *child1 = new QObject(parent); QObject *child2 = new QObject(parent); QObject *child1_1 = new QObject(child1); QObject *child1_2 = new QObject(child1); delete parent; parent parent deletes child1 and child2 child1 deletes child1_1 and child1_2 child1 child1_1 child2 child1_2
40 Hierarchia rodzic-dziecko QDialog *parent = new QDialog(); QGroupBox *box = new QGroupBox(parent); QPushButton *button = new QPushButton(parent); QRadioButton *option1 = new QRadioButton(box); QRadioButton *option2 = new QRadioButton(box); delete parent; Parent usuwa box oraz button box usuwa option1 oraz option2
41 Wskaźnik this jako odwołanie do rodzica Dialog::Dialog(QWidget *parent) : QDialog(parent) { QGroupBox *box = QGroupBox(this); QPushButton *button = QPushButton(this); QRadioButton *option1 = QRadioButton(box); QRadioButton *option2 = QRadioButton(box);... Alokacja rodzica na stosie: void Widget::showDialog() { Dialog dialog; } if (dialog.exec() == QDialog::Accepted) {... } dialog jest w tym momencie usuwany
42 Używając new oraz delete, pamięć alokowana jest na stercie. Odpowiedni obszar sterty musi być zwolniony używając delete żeby zapobiec wyciekom pamięci. Obiekty alokowane na stercie żyją tak długo jak są potrzebne. new Tworzenie Usuwanie delete
43 Zmienne lokalne alokowane są na stosie. Zmienne alokowane na stosie są automatycznie usuwane gdy utracą widoczność. Podobna sytuacja ma miejsce w przypadku obiektów. int a Tworzenie Usuwanie }
44 By zrealizować automatyczne zarządzanie pamięcią, wystarczy by węzły rodziców były alokowane na stosie MyMainWindow QApplication int main(int argc, char **argv) { QApplication a(argc, argv); MyMainWindow w; w.show(); return a.exec(); } MyMainWindow::MyMainWindow(... { new QLabel(this); new... }
45 Obiekty klasy QObject mogą mieć zmienianego właściciela: obj->setparent(newparent); Rodzice są informowani o tym, kiedy obiekt jest usuwany: delete listwidget->item(0); // Usuwa pierwszy element (uwaga) Lepiej wykorzystać metody z przedrostkiem take : QLayoutItem *QLayout::takeAt(int); QListWidgetItem *QListWidget::takeItem(int); // Safe alternative QListWidgetItem *item = listwidget->takeitem(0); if (item) { delete item; }
46 Większość QObjectów pozwala na ustawienie rodzica, z domyślną wartością 0 (null) QObject(QObject *parent=0); Rodzicem Qwidget jest inny QWidget Zwykle dostępnych jest wiele różnych konstruktorów (w tym jeden pozwalający zdefiniować wyłącznie rodzica) QPushButton(QWidget *parent=0); QPushButton(const QString &text, QWidget *parent=0); QPushButton(const QIcon &icon, const QString &text, QWidget *parent=0); Rodzic jest zwykle pierwszy na liście argumentów QLabel(const QString &text, QWidget *parent=0, Qt::WindowFlags f=0);
47 Wykorzystanie slotu jako funkcji przypisanej do sygnału rozwiązane analogiczne do procedury obsługi zdarzenia (VS)
48 Wykorzystanie powiązania sygnał-slot rozwiązane z wykorzystaniem QtDesigner'a.
49 Informacje o powiązaniu sygnał-slot zapisywane są do pliku definicji okna głównego mainwindow.ui.
50 Wykorzystanie powiązania sygnał-slot wykorzystaniem makra connect w kodzie programu.
51 Wywołanie zwrotne to wskaźnik do funkcji, która jest wywoływana kiedy nastąpi dane zdarzenie. Każda funkcja może być przyporządkowania do wywołania zwrotnego. Brak bezpieczeństwa typów (type-safety) Zawsze działa jako bezpośrednie wywołanie. Mechanizm slotów i sygnałów jest bardziej dynamiczny: Bardziej ogólny mechanizm Dokonywane jest sprawdzenie typów Łatwiejsza implementacja wielowątkowości
52 Slot definiowany jest w sekcji slots public slots: void apublicslot(); protected slots: void aprotectedslot(); private slots: void aprivateslot(); Slot może zwracać wartości, ale nie podczas tworzenia połączeń Dowolna liczba sygnałów może być połączona ze slotem connect(src, SIGNAL(sig()), dest, SLOT(slt())); Implementacja nie różni się od zwyczajnej funkcji Może być wywoływana jak zwyczajna funkcja
53 Sygnał definiowany jest w sekcji signals: signals: void asignal(); Sygnał nie może zwracać jakiejkolwiek wartości (void) Sygnał nie może posiadać implementacji Moc zapewnia jego implementację Sygnał może zostać podłączony do dowolnej liczby slotów Zwykle realizowany jest jako połączenie bezpośrednie, ale może być wykorzystywany również przy odwoływaniu się do różnych wątków czy komunikacji sieciowej Sloty wywoływane są w losowej kolejności Sygnał emitowany jest korzystając ze słowa kluczowego emit emit asignal();
54 QObject* QObject::connect( src, SIGNAL( signature ), dest, SLOT( signature ) ); <function name> ( <arg type>... ) Sygnatura składa się z nazwy funkcji i typów argumentów. Nazwy zmiennych bądź ich wartości nie są dozwolone. clicked() settitle(qstring text) toggled(bool) setvalue(42) settext(qstring) setitem(itemclass) textchanged(qstring) rangechanged(int,int)
55 Qt może ignorować argumenty, ale nie może ich tworzyć z niczego Sygnał rangechanged(int,int) rangechanged(int,int) rangechanged(int,int) Slot setrange(int,int) setvalue(int) updatedialog() valuechanged(int) valuechanged(int) valuechanged(int) setrange(int,int) setvalue(int) updatedialog() textchanged(qstring) setvalue(int) clicked() clicked() setvalue(int) updatedialog()
56 Połączenie dwustronne connect(dial1, SIGNAL(valueChanged(int)), dial2, SLOT(setValue(int))); connect(dial2, SIGNAL(valueChanged(int)), dial1, SLOT(setValue(int))); Stop pętli nieskończonej sygnał nie jest emitowany, jeżeli nie nastąpiła zmiana wartości void QDial::setValue(int v) { if(v==m_value) return;... Nie należy o tym zapominać!
57 class AngleObject : public QObject { Q_OBJECT Q_PROPERTY(qreal angle READ angle WRITE setangle NOTIFY anglechanged) public: AngleObject(qreal angle, QObject *parent = 0); qreal angle() const; Jaki sygnał wysłać jak się zmieni? public slots: void setangle(qreal); signals: void anglechanged(qreal); private: qreal m_angle; }; Modyfikatory to często sloty. Sygnały to często akcesory
58 void AngleObject::setAngle(qreal angle) { if(m_angle == angle) return; } m_angle = angle; emit anglechanged(m_angle); Zabezpieczenie przez pętlą nieskończoną. Nie należy zapomnieć! Uaktualnij stan i wyślij odpowiedni sygnał Sygnały najczęściej definiowane są w sekcji chronionej (protected) dlatego można je wysyłać z klas potomnych
59 Wykorzystuje klasę TempConverter do konwersji między systemami Celsjusza i Fahrenheita. Wysyła sygnały gdy temperatura się zmienia
60 Program zawiera instancje następujących klas: Instancja TempConverter Dwa widgety QGroupBox, a każdy z nich zawiera: Widget QDial Widget QLCDNumber
61 class TempConverter : public QObject QObject jako rodzic { Q_OBJECT Makro Q_OBJECT Wskaźnik do rodzica public: TempConverter(int tempcelsius, QObject *parent = 0); int tempcelsius() const; int tempfahrenheit() const; public slots: void settempcelsius(int); void settempfahrenheit(int); signals: void tempcelsiuschanged(int); void tempfahrenheitchanged(int); private: int m_tempcelsius; }; Akcesory i modyfikatory Emitowane gdy zmienia się temperatura Wewnętrzna reprezentacji temperatury w Celsjuszach
62 Slot settempcelsius: void TempConverter::setTempCelsius(int tempcelsius) { if(m_tempcelsius == tempcelsius) Stop rekurencji return; m_tempcelsius = tempcelsius; Zmień stan obiektu } emit tempcelsiuschanged(m_tempcelsius); emit tempfahrenheitchanged(tempfahrenheit()); Slot settempfahrenheit: Emisja sygnałów o zmianie void TempConverter::setTempFahrenheit(int tempfahrenheit) { int tempcelsius = (5.0/9.0)*(tempFahrenheit-32); settempcelsius(tempcelsius); } Konwersja na Celsjusze
63 valuechanged settempcelsius tempcelsiuschanged setvalue Pokrętłami zarządza obiekt klasy TempConverter Zmiany na wyświetlaczach LCD są warunkowane przez TempConverter zmiany pokręteł settempcelsius settempfahrenheit tempcelsiuschanged tempfahrenheitchanged valuechanged display tempfahrenheitchanged setvalue valuechanged settempfahrenheit connect(celsiusdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempCelsius(int))); connect(celsiusdial, SIGNAL(valueChanged(int)), celsiuslcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempCelsiusChanged(int)), celsiusdial, SLOT(setValue(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempFahrenheit(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), fahrenheitlcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempFahrenheitChanged(int)), fahrenheitdial, SLOT(setValue(int)));
64 valuechanged settempcelsius tempcelsiuschanged setvalue Użytkownik przesuwa pokrętło zmiany temperatury w Celsjuszach TempConverter settempcelsius settempfahrenheit tempcelsiuschanged tempfahrenheitchanged tempfahrenheitchanged setvalue valuechanged settempfahrenheit valuechanged display connect(celsiusdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempCelsius(int))); connect(celsiusdial, SIGNAL(valueChanged(int)), celsiuslcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempCelsiusChanged(int)), celsiusdial, SLOT(setValue(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempFahrenheit(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), fahrenheitlcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempFahrenheitChanged(int)), fahrenheitdial, SLOT(setValue(int)));
65 valuechanged settempcelsius tempcelsiuschanged setvalue Użytkownik przesuwa pokrętło zmiany temperatury w Celsjuszach TempConverter settempcelsius settempfahrenheit tempcelsiuschanged tempfahrenheitchanged tempfahrenheitchanged setvalue valuechanged settempfahrenheit valuechanged display connect(celsiusdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempCelsius(int))); connect(celsiusdial, SIGNAL(valueChanged(int)), celsiuslcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempCelsiusChanged(int)), celsiusdial, SLOT(setValue(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempFahrenheit(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), fahrenheitlcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempFahrenheitChanged(int)), fahrenheitdial, SLOT(setValue(int)));
66 valuechanged settempcelsius tempcelsiuschanged setvalue Użytkownik przesuwa pokrętło zmiany temperatury w Celsjuszach TempConverter settempcelsius settempfahrenheit tempcelsiuschanged tempfahrenheitchanged tempfahrenheitchanged setvalue valuechanged settempfahrenheit valuechanged display connect(celsiusdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempCelsius(int))); connect(celsiusdial, SIGNAL(valueChanged(int)), celsiuslcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempCelsiusChanged(int)), celsiusdial, SLOT(setValue(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempFahrenheit(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), fahrenheitlcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempFahrenheitChanged(int)), fahrenheitdial, SLOT(setValue(int)));
67 valuechanged settempcelsius tempcelsiuschanged setvalue Użytkownik przesuwa pokrętło zmiany temperatury w Celsjuszach TempConverter settempcelsius settempfahrenheit tempcelsiuschanged tempfahrenheitchanged tempfahrenheitchanged setvalue valuechanged settempfahrenheit valuechanged display connect(celsiusdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempCelsius(int))); connect(celsiusdial, SIGNAL(valueChanged(int)), celsiuslcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempCelsiusChanged(int)), celsiusdial, SLOT(setValue(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempFahrenheit(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), fahrenheitlcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempFahrenheitChanged(int)), fahrenheitdial, SLOT(setValue(int)));
68 valuechanged settempcelsius tempcelsiuschanged setvalue Użytkownik przesuwa pokrętło zmiany temperatury w Celsjuszach TempConverter settempcelsius settempfahrenheit tempcelsiuschanged tempfahrenheitchanged tempfahrenheitchanged setvalue valuechanged settempfahrenheit valuechanged display connect(celsiusdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempCelsius(int))); connect(celsiusdial, SIGNAL(valueChanged(int)), celsiuslcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempCelsiusChanged(int)), celsiusdial, SLOT(setValue(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempFahrenheit(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), fahrenheitlcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempFahrenheitChanged(int)), fahrenheitdial, SLOT(setValue(int)));
69 valuechanged settempcelsius tempcelsiuschanged setvalue Użytkownik przesuwa pokrętło zmiany temperatury w Celsjuszach TempConverter settempcelsius settempfahrenheit tempcelsiuschanged tempfahrenheitchanged tempfahrenheitchanged setvalue valuechanged settempfahrenheit valuechanged display connect(celsiusdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempCelsius(int))); connect(celsiusdial, SIGNAL(valueChanged(int)), celsiuslcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempCelsiusChanged(int)), celsiusdial, SLOT(setValue(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempFahrenheit(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), fahrenheitlcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempFahrenheitChanged(int)), fahrenheitdial, SLOT(setValue(int)));
70 valuechanged settempcelsius tempcelsiuschanged setvalue Użytkownik przesuwa pokrętło zmiany temperatury w Celsjuszach TempConverter settempcelsius settempfahrenheit tempcelsiuschanged tempfahrenheitchanged tempfahrenheitchanged setvalue valuechanged settempfahrenheit valuechanged display connect(celsiusdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempCelsius(int))); connect(celsiusdial, SIGNAL(valueChanged(int)), celsiuslcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempCelsiusChanged(int)), celsiusdial, SLOT(setValue(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), tempconverter, SLOT(setTempFahrenheit(int))); connect(fahrenheitdial, SIGNAL(valueChanged(int)), fahrenheitlcd, SLOT(display(int))); connect(tempconverter, SIGNAL(tempFahrenheitChanged(int)), fahrenheitdial, SLOT(setValue(int)));
71 Często istnieje potrzeba przekazania wartości w instrukcji connect connect(key, SIGNAL(clicked()), this, SLOT(keyPressed(1))); Przykładowo implementując klawiaturę: Nie jest to prawidłowy zapis
72 Rozwiązanie #1: wiele slotów {... connections public slots: void key1pressed(); void key2pressed(); void key3pressed(); void key4pressed(); void key5pressed(); void key6pressed(); void key7pressed(); void key8pressed(); void key9pressed(); void key0pressed(); }...
73 Rozwiązanie #2: własna implementacja przycisku { QPushButton QIntPushButton... signals: void clicked(int); { QIntPushButton *b; b=new QIntPushButton(1); connect(b, SIGNAL(clicked(int)), this, SLOT(keyPressed(int))); b=new QIntPushButton(2); connect(b, SIGNAL(clicked(int)), this, SLOT(keyPressed(int))); b=new QIntPushButton(3); connect(b, SIGNAL(clicked(int)), this, SLOT(keyPressed(int))); }... }...
74 #1: wiele slotów Wiele slotów zawierających niemalże ten sam kod Kod trudny w utrzymaniu Trudne rozszerzenie funkcjonalności (ciągle nowy slot) #2: własna implementacja przycisku Nowa wyspecjalizowana klasa Trudne rozszerzenie funkcjonalności
75 Klasa QSignalMapper rozwiązuje ten problem Przyporządkuje wartość do każdego emitera Jest warstwą pośredniczącą { QSignalMapper *m = new QSignalMapper(this); QPushButton *b; b=new QPushButton("1"); connect(b, SIGNAL(clicked()), m, SLOT(map())); m->setmapping(b, 1);... Przyporządkuj emiterowi wartość Stwórz QSignalMapper Połącz przyciski do warstwy pośredniczącej Połącz pośrednika do slotu } connect(m, SIGNAL(mapped(int)), this, SLOT(keyPressed(int)));
76 Każdy przycisk ma przyporządkowaną wartość liczbową {... connections QSignalMapper connection public slots: void keypressed(); }... Warstwa pośrednicząca (QSignalMaper) emituje sygnał mapped(int), który przekazuje przyporządkowaną danemu przyciskowi wartość.
Programowanie w środowiskach RAD Qt i C++
Programowanie w środowiskach RAD Qt i C++ Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Wprowadzenie do programowania w języku C++ z wykorzystaniem biblioteki Qt Qt i QtCreator Aktualnie
Programowanie w środowiskach RAD QtCreator, Qt i C++
Programowanie w środowiskach RAD QtCreator, Qt i C++ Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Wprowadzenie do programowania w C++ z wykorzystaniem biblioteki Qt Sygnały i sloty Sygnały
Qt sygnały i designer
Qt sygnały i designer Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2015 Bogdan
Wprowadzenie do tworzenia zaawansowanych interfejsów graficznych: QGraphics View Framework vs. QML. Jakub Bogacz. Patryk Górniak
Wprowadzenie do tworzenia zaawansowanych interfejsów graficznych: QGraphics View Framework vs. QML Jakub Bogacz Software Engineer Tieto, Jakub.Bogacz@tieto.com Patryk Górniak Software Engineer Tieto, Patryk.Górniak@tieto.com
Podstawy programowania w Qt4
Podstawy programowania w Qt4 Rafał Rawicki 21 kwietnia 2007 Co to jest Qt? Zestaw bibliotek dla języka C++ oraz narzędzia roszerzające jego możliwości Ponad 400 klas Introspekcja oraz mechanizm sygnałów
Qt - podstawowe cechy
Qt - podstawowe cechy Bogdan Kreczmer ZPCiR ICT PWR pokój 307 budynek C3 kreczmer@ict.pwr.wroc.pl Copyright c 2003 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania
Signals + Threads: Qt vs. Boost
Signals + Threads: Qt vs. Boost Adam Bujalski 2014-04-01 Adam Bujalski Signals + Threads: Qt vs. Boost 2014-04-01 1 / 22 Spis Treści 1 2 Wątki 3 Qt::QueuedConnection w boost Adam Bujalski Signals + Threads:
Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4
Wykład 4 p. 1/1 Oprogramowanie i wykorzystanie stacji roboczych Wykład 4 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Obsługa sieci Wykład
Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt
Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt 1. Wprowadzenie Wymagania wstępne: wykonanie ćwiczeń Adresacja IP oraz Implementacja aplikacji sieciowych z wykorzystaniem interfejsu gniazd
Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Digia Plc. na licencji CC.
Qt Quick Tłumaczenie i adaptacja materiałów: dr Tomasz Xięski. Na podstawie prezentacji udostępnionych przez Digia Plc. na licencji CC. 2012 Digia Plc. The enclosed Qt Materials are provided under the
Praca z aplikacją designer
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2014 Bogdan Kreczmer Niniejszy dokument
Qt - dialogi. Bogdan Kreczmer. ZPCiR ICT PWR pokój 307 budynek C3
Qt - dialogi Bogdan Kreczmer ZPCiR ICT PWR pokój 307 budynek C3 kreczmer@ict.pwr.wroc.pl Copyright c 2003 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
The Graphics View Framework. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. he Graphics View Framework - architektura
The Graphics View Framework Oprogramowanie i wykorzystanie stacji roboczych Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska The Graphics View
Zaawansowane programowanie w języku C++ Klasy w C++
Zaawansowane programowanie w języku C++ Klasy w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń
Wykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.
Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą
Programowanie obiektowe
Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;
Mechanizm sygnałów i slotów. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4. Sygnały i sloty - definicja klasy
Mechanizm sygnałów i slotów Oprogramowanie i wykorzystanie stacji roboczych Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Mechanizm sygnałów
Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska
Qt sygnały i sloty Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera
KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
X Window System (I) Oprogramowanie i wykorzystanie stacji roboczych. Wykład 1. X Window System (III) X Window System (II)
X Window System (I) Oprogramowanie i wykorzystanie stacji roboczych Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska X Window System można
Qt in Education. Sieć I drukowanie
Qt in Education Sieć I drukowanie. 1 Tłumaczenie i adaptacja: dr inż. Piotr Kaczmarka na podstawie kursu na podstawie materiału Diga Plc. Materiały służą do prowadzenia zajęć z informatyki dla studentów
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja
Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016
Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac
Programowanie obiektowe
Wykład 2 28 lutego 2019 Plan wykładu 1 2 3 4 5 Plan wykładu 1 2 3 4 5 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie; standardy ISO i ECMA; podobny składniowo do C++; Język C Krótka
PHP 5 język obiektowy
PHP 5 język obiektowy Wprowadzenie Klasa w PHP jest traktowana jak zbiór, rodzaj różnych typów danych. Stanowi przepis jak stworzyć konkretne obiekty (instancje klasy), jest definicją obiektów. Klasa reprezentuje
Zaawansowane programowanie w C++
Zaawansowane programowanie w C++ Micha l Tanaś, PhD Adam Mickiewicz University, Faculty of Physics http://www.amu.edu.pl/~mtanas Michal.Tanas@amu.edu.pl Wykonanie klasycznego programu System operacyjny
Zaawansowane programowanie w języku C++ Programowanie obiektowe
Zaawansowane programowanie w języku C++ Programowanie obiektowe Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C
#import "Fraction.h" #import @implementation Fraction -(Fraction*) initwithnumerator: (int) n denominator: (int) d { self = [super init]; } if ( self ) { [self setnumerator: n anddenominator:
Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/
Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i
Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),
Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których
System X Window (I) Oprogramowanie i wykorzystanie stacji roboczych. Wykład 3. System X Window (III) System X Window (II)
System X Window (I) Oprogramowanie i wykorzystanie stacji roboczych Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska X Window można określić
Oprogramowanie i wykorzystanie stacji roboczych. Wykład 3
Wykład 3 p. 1/4 Oprogramowanie i wykorzystanie stacji roboczych Wykład 3 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska System X Window (I)
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019
Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości
KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
Szablony funkcji i szablony klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument
PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec
PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych
PARADYGMATY PROGRAMOWANIA Wykład 4
PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej
Programowanie, część III
9 kwietnia 2010 Biblioteki i podsystemy graficzne Biblioteki graficzne (ang. graphics library) Są potrzebne, aby można było programować grafikę w C++, ponieważ (niestety) we współczesnych systemach komputerowych
Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy
Składnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory
Programowanie obiektowe
Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do
Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji
Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 5 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w
Wykład 3 Składnia języka C# (cz. 2)
Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest
Wstęp do programowania obiektowego. Wykład 2
Wstęp do programowania obiektowego Wykład 2 1 CECHY I KONCEPCJA PROGRAMOWANIA OBIEKTOWEGO 2 Cechy programowania obiektowego Dla wielu problemów podejście obiektowe jest zgodne z rzeczywistością (łatwe
Qt hierarchia elementów graficznych
Qt hierarchia elementów graficznych Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2015 Bogdan Kreczmer Niniejszy
Delphi podstawy programowania. Środowisko Delphi
Delphi podstawy programowania Środowisko Delphi Olsztyn 2004 Delphi Programowanie obiektowe - (object-oriented programming) jest to metodologia tworzeniu programów komputerowych definiująca je jako zbiór
Rys. 1. Główne okno programu QT Creator. Na rysunku 2 oznaczone zostały cztery przyciski, odpowiadają kolejno następującym funkcjom:
1. QT creator, pierwsze kroki. Qt Creator wieloplatformowe środowisko programistyczne dla języków C++, JavaScript oraz QML, będące częścią SDK dla biblioteki Qt. Zawiera w sobie graficzny interfejs dla
Programowanie obiektowe
Programowanie obiektowe Laboratorium 3 i 4 - przypomnienie wiadomości o OOP na przykładzie Javy mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 8 marca 2017 1 / 20 mgr inż. Krzysztof Szwarc
Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np
Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami
C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści
C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop. 2016 Spis treści Spis rysunków 11 Spis tabel 13 Przedmowa 15 Wprowadzenie 17 Podziękowania 27 O autorach 29 1 Wprowadzenie
Multimedia JAVA. Historia
Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania
Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne
Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Wzorce projektowe Wybrane wzorce strukturalne Fasada Facade Pattern 2 Wzorzec Fasada Facade Pattern koncepcja 3 Wzorzec
Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński
Programowanie aplikacji na iphone. Wstęp do platformy ios. Łukasz Zieliński Plan Prezentacji. Programowanie ios. Jak zacząć? Co warto wiedzieć o programowaniu na platformę ios? Kilka słów na temat Obiective-C.
Szablony klas, zastosowanie szablonów w programach
Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {
Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod
Wprowadzenie do szablonów szablony funkcji
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Współbieżność w środowisku Java
Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych
Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;
Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze
JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.
JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod
Wprowadzenie do szablonów szablony funkcji
Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do
Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje
Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 4 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w
Metaprogramowanie w Ruby
24 marca 2011 Cechy języka Wieloparadygmatowy Imperatywny Typowanie Silne Dynamiczne Otwarte klasy Interpretowany Wszystko jest obiektem Moduły i mixiny Moduły Moduły pozwalają na łatwe włączanie ich kodu
Zofia Kruczkiewicz, ETE8305_2 1
Wprowadzenie do programowania obiektowego w C++ 1. Główne zasady programowania obiektowego: hermetyzacja, dziedziczenie, polimorfizm 2. Pojęcie klasy: sposoby deklarowania i definiowania składowych klasy,
Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe
Architektury Usług Internetowych Laboratorium 2. Usługi sieciowe Wstęp Celem laboratorium jest zapoznanie się z modelem usług sieciowych na przykładzie prostego serwera Apache Axis2. Apache Axis2 Apache
Podstawy programowania III
Podstawy programowania III Jan Kazimirski 1 Opis zajęć Zastosowanie funkcji i obiektów w PHP powtórzenie zagadnień. Dostęp do bazy danych PostgreSQL z poziomu skryptu PHP. Wprowadzenie do języka SQL. Przykłady
Podstawy Programowania Obiektowego
Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja
Składnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Przeciążanie operatorów Słowo
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie
Programowanie Komputerów
Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 28 1. Tablice w C# Indeksowane od zera
Rozdział 4 KLASY, OBIEKTY, METODY
Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej
Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:
Program przedmiotu Programowanie Obiektowe (język C++) Wykład 1. Definiowanie prostych klas. Przykłady. Przypomnienie: typy referencyjne, domyślne wartości argumentów, przeciąŝanie funkcji. Konstruktory,
Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14
Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Wirtualne destruktory class A int* a; A(int _a) a = new int(_a);} virtual ~A() delete a;} class B: public A double* b;
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {
Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie
Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.
Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego
Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska
Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,
Programowanie 2. Język C++. Wykład 3.
3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane
Programowanie w języku C++
Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
Instrukcja laboratoryjna cz.3
Języki programowania na platformie.net cz.2 2015/16 Instrukcja laboratoryjna cz.3 Język C++/CLI Prowadzący: Tomasz Goluch Wersja: 2.0 I. Utworzenie projektu C++/CLI z interfejsem graficznym WPF 1 Cel:
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Wyjątki (exceptions)
Instrukcja laboratoryjna nr 6 Programowanie w języku C 2 (C++ poziom zaawansowany) Wyjątki (exceptions) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp Wyjątki (ang.
Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.
Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji
Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.
Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.
1 Atrybuty i metody klasowe
1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich
Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C
Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C Wymagana wiedza wstępna: 1) Student musi 1) Znać język C 2) Znać zasady zarządzania pamięcią w komputerze 3) Znać pojecie wskaźnika
JAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak
Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego
Aplikacja po polsku. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.
Aplikacja po polsku Bogdan Kreczmer ZPCiR ICT PWr pokój 307 budynek C3 kreczmer@ict.pwr.wroc.pl Copyright c 2004 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat wizualizacji danych
Wykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Aplikacje w środowisku Java
Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - wprowadzenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 Klasa zbiór pól i metod Obiekt
Dziedziczenie. Tomasz Borzyszkowski
Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.
Dokumentacja do API Javy.
Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu
Definicje klas i obiektów. Tomasz Borzyszkowski
Definicje klas i obiektów Tomasz Borzyszkowski Podstawy Do tej pory używaliśmy klas jedynie po to, by zdefiniować metodę main(). Klasy mają znacznie szersze zastosowanie w Java. W OOP (także w Java) klasy
Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).
Wprowadzenie w dziedziczenie Klasa D dziedziczy klasę B: B klasa bazowa D klasa pochodna Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Najpierw jest tworzona klasa bazowa,
Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:
Program przedmiotu Programowanie (język C++) Wykład 1. Język C a C++. Definiowanie prostych klas. Typy referencyjne. Domyślne wartości argumentów. PrzeciąŜanie funkcji. Konstruktory, destruktory. Definiowanie
2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne
Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie
Programowanie obiektowe i C++ dla matematyków
Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać
PRZYJĘTE ZASADY GRY...3 ZAŁOŻENIA PROJEKTU...4 CZYM JEST I DLACZEGO QT?...5 DIAGRAM KLAS...7 DIAGRAM GRY SINGLE PLAYER...8 DIAGRAM MULTIPLAYERA...
WARCABY Spis treści PRZYJĘTE ZASADY GRY...3 ZAŁOŻENIA PROJEKTU...4 CZYM JEST I DLACZEGO QT?...5 DIAGRAM KLAS...7 DIAGRAM GRY SINGLE PLAYER...8 DIAGRAM MULTIPLAYERA...9 1.PRZYJĘTE ZASADY GRY 1. W grze bierze