admin
|
|
« : Styczeñ 11, 2012, 08:48:30 » |
|
Programowanie strukturalne przedstawia program jako seriê procedur, dzia³aj±cych na danych. Funkcja jest zestawem specyficznych, wykonywanych jedna po drugiej instrukcji. Dane s± ca³kowicie odseparowane od funkcji, zadaniem programisty by³o zapamiêtanie, która funkcja wywo³uje inne funkcje, oraz jakie dane by³y w wyniku tego zmieniane. G³ówn± ide± programowania strukturalnego jest: „dziel i rz±d¼.” Program komputerowy mo¿e byæ uwa¿any za zestaw zadañ. Ka¿de zadanie, które jest zbyt skomplikowane aby mo¿na by³o je ³atwo opisaæ, jest rozbijane na zestaw mniejszych zadañ sk³adowych, a¿ do momentu gdy, wszystkie zadania s± wystarczaj±co ³atwe do zrozumienia. Programowanie strukturalne stanowi niezwykle efektywny sposób rozwi±zywania z³o¿onych problemów. Posiada kilka ograniczeñ nie pozwalaj±cych na bardziej efektywne u¿ywanie kodu.
Jêzyk C++ jest zorientowanym obiektowo, pozwala to na zastosowanie w nim trzech zasad charakterystycznych dla programowania obiektowego: hermetyzacjê (kapsu³kowanie), dziedziczenie oraz polimorfizm. Hermetyzacja(kapsu³kowanie) oznacza ukrycie metod w czê¶ci prywatnej. Dziedziczenie to specjalny mechanizm, który umo¿liwia tworzenie klas pochodnych, czyli bêd±cych niejako rozbudowan± wersj± klas ju¿ istniej±cych. Polimorfizm w programowaniu obiektowym oznacza wykorzystanie tego samego kodu do operowania na obiektach przynale¿nych ró¿nym klasom, dziedzicz±cym od siebie. Zjawisko to jest zatem ¶ci¶le zwi±zane z klasami i dziedziczeniem, aczkolwiek w C++ nie dotyczy ono ka¿dej klasy, a jedynie okre¶lonych typów polimorficznych. Programowanie obiektowe - pozwala na operowanie w programie struktur± która nosi nazwê obiektu. Obiekt = Dane +Metody. Dane - (w³a¶ciwo¶ci/ properties) to warto¶ci opisuj±ce obiekt, odpowiadaj± zmiennym w programowaniu strukturalnym. Mo¿na im przypisywaæ warto¶ci za pomoc± operatora = . Metody - to funkcje wykorzystywane dla ¶ci¶le okre¶lonych danych. Obiekt jest elementem pewnej klasy. W C++ nale¿y na pocz±tku zadeklarowaæ klasê i dopiero potem obiekty bêd±ce potomkami klasy.
Metoda zstêpuj±ca polega na: Roz³o¿yæ ca³y problem na ¶ci¶le okre¶lone podproblemy i udowodniæ, ¿e je¶li ka¿dy podproblem jest rozwi±zany poprawnie, a te rozwi±zania s± po³±czone w okre¶lony sposób, to pierwotny problem te¿ jest rozwi±zany poprawnie. Proces dzielenia na podproblemy nale¿y prowadziæ tak d³ugo, a¿ ich rozwi±zanie mo¿na zapisaæ za pomoc± kilku wierszy w wybranym jêzyku programowania.
|
|
« Ostatnia zmiana: Luty 08, 2012, 10:55:50 wys³ane przez admin »
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #1 : Styczeñ 11, 2012, 09:15:12 » |
|
Przyk³ad przedstawiaj±cy deklaracjê klasy i obiektu bêd±cego potomkiem tej klasy.
#include <cstdlib> #include <iostream>
using namespace std; class osoba {protected: char imie[255], nazwisko[255]; int dlug; public: osoba(); osoba(char *aimie, char anazwisko, int adlug){}; private: int wiek; };
int main(int argc, char *argv[]) { osoba miecio; system("PAUSE"); return EXIT_SUCCESS; } osoba::osoba(){};
W programie przedstawionym wy¿ej napisa³em dwie metody o nazwie osoba. Osoba to równie¿ nazwa klasy. Takie dzia³anie nazywane jest przeci±¿eniem nazwy metody , kompilator rozpozna w³a¶ciw± metodê na podstawie liczby parametrów.
Kolejn± nowo¶ci± jest sposób deklaracji cia³a metody. Podobnie jak przy deklarowaniu funkcji w programowaniu strukturalnym cia³o mo¿na umie¶ciæ przy deklaracji prototypu (osoba(char *aimie, char anazwisko, int adlug){};) lub poza deklaracj± klasy (osoba::osoba(){}). Wtedy jednak trzeba napisaæ do jakiej klasy przypisana jest dana metoda, s³u¿y temu podwójny dwukropek :: . Operator :: nazywany jest operatorem widoczno¶ci.
Do ograniczenia dostêpu do danych konieczne jest zadeklarowanie z jakimi zmiennymi ma program do czynienia. Istniej± trzy poziomy dostêpno¶ci: public - oznacza,¿e umieszczone za nim pola i metody s± dostêpne w ca³ym programie. protected - s± dostêpne w sposób bezpo¶redni, przez u¿ycie operatora wyboru sk³adowej - kropki ( o tym pó¼niej) tylko w klasach pochodnych od danej klasy. private - brak jest bezpo¶redniego dostêpu do do pól. Je¿eli zmienna jest typu public, to mo¿na do niej siê do niej odwo³aæ stosuj±c wywo³anie: miecio.osoba();
Je¿eli zmienna jest typu private lub protected to na zewn±trz klasy nie mo¿na tego zrobiæ, trzeba wykorzystaæ metodê która bêdzie typu public, ale o tym pó¼niej.
|
|
« Ostatnia zmiana: Styczeñ 11, 2012, 10:05:02 wys³ane przez admin »
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #2 : Styczeñ 11, 2012, 10:18:30 » |
|
By³o ciê¿ko spróbujemy trochê ³atwiej. Proszê sobie wyobraziæ,¿e piszemy grê wojenn± w której uczestnicz± pojazdy takie jak czo³gi, transportery, samochody pancerne.
Zadeklarujmy zatem klasê czolg, która bêdzie posiada³a w³a¶ciwo¶ci : amunicja, predkosc, odpornosc, strzal. #include <cstdlib> #include <iostream>
using namespace std; class czolg {public: int amunicja; int predkosc; int odpornosc; int strzal;}; int main(int argc, char *argv[]) { system("PAUSE"); return EXIT_SUCCESS; } -------------------- wersja z klas± transporter ------------------------------------ #include <cstdlib> #include <iostream>
using namespace std; class czolg {public: int amunicja; int predkosc; int odpornosc; int strzal;}; class transporter {public: int amunicja; int predkosc; int odpornosc; int strzal; int osoby; }; int main(int argc, char *argv[]) { system("PAUSE"); return EXIT_SUCCESS; }
------------------------------------ wersja uproszczona wykorzystuj±ca dziedziczenie ----------- #include <cstdlib> #include <iostream>
using namespace std; class czolg {public: int amunicja; int predkosc; int odpornosc; int strzal;}; class transporter :public czolg {public: int osoby; }; int main(int argc, char *argv[]) { system("PAUSE"); return EXIT_SUCCESS; }
|
|
« Ostatnia zmiana: Styczeñ 11, 2012, 10:31:22 wys³ane przez admin »
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #3 : Styczeñ 11, 2012, 10:47:38 » |
|
Uwagi do poprzedniego przyk³adu: Podczas dziedziczenia zawarto¶æ klasy podstawowej staje siê automatycznie zawarto¶ci± klasy pochodnej. Wszystkie sk³adniki i funkcje sk³adowe staj± siê dostêpne w klasie odziedziczonej. W przyk³adzie u¿yto zmiennych typu public. Dodajmy teraz kilka funkcje do zadeklarowanych klas.
class czolg {public: int amunicja; int predkosc; int odpornosc; int strzal; void jazda(); }; void czolg::jazda(){ int v=0; }
int main(int argc, char *argv[]) { system("PAUSE"); return EXIT_SUCCESS; }
-------------------------- wersja z metody typu int ----------------------- class czolg {public: int amunicja; int predkosc; int odpornosc; int strzal; void jazda(); }; void czolg::jazda(){ int v=0; }
int main(int argc, char *argv[]) { system("PAUSE"); return EXIT_SUCCESS; }
|
|
« Ostatnia zmiana: Styczeñ 11, 2012, 11:47:32 wys³ane przez admin »
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #4 : Styczeñ 11, 2012, 12:08:14 » |
|
Pamiêtaj: Z klasy tworzone s± obiekty. Trzy cechy programowania obiektowego:
Hermetyzacja (kapsu³kowanie) - definiowanie nowego typu danych które zawieraj± pola i metody (funkcje). Klasa to struktura która zawiera dane i funkcje. Klasa czolg zawiera parametry czo³gu i funkcje opisuj±ce jak bêdzie siê zachowywa³ np. funkcjê czolg.przemieszczenie opisuj±ca zmianê po³o¿enia czo³gu na planszy gry. Dziedziczenie - je¿eli do definicji nowego obiektu u¿ywamy opisu innego wcze¶niej zdefiniowanego , to ten nowy obiekt bêdzie dziedziczy³ wszystkie cechy (dane i metody) po obiekcie rodzicielskim. Abrams i Leopard posiadaj± dziedziczone z klasy czolg funkcjê przemieszczenie Polimorfizm - umo¿liwia zmniejszenie do minimum pracy przy pisaniu kodu. Funkcja która zosta³a wprowadzona do obiektu potomnego posiada tak± sam± nazwê jak funkcja w klasie z której powsta³a ale mo¿e wykonywaæ ró¿ne zadania. Np. przy funkcji przemieszczanie Abrams mo¿e uton±æ w bagnie podczas gdy Leopard bêdzie jecha³.
|
|
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #5 : Styczeñ 11, 2012, 12:09:38 » |
|
Kontrola dostêpu do elementów klasy Prywatne sk³adowe klasy (private : int a;) s± dostêpne jedynie wewn±trz samej klasy , tj. tylko dla jej w³asnych metod.
Publiczne sk³adowe klasy (public : int wiek;) widoczne s± zawsze i wszêdzie - nie tylko dla samej klasy (jej metod), ale na zewn±trz - np. dla jej obiektów.
Je¿eli nie zadeklarowano sposobu ograniczenia dostêpu do danych, to w przypadku klas (definiowanych poprzez class ) jest to dostêp prywatny, natomiast dla typów strukturalnych (s³ówko struct ) - dostêp publiczny.
Metody czyni± klasy. To dziêki funkcjom sk³adowym pasywne zbiory danych, którymi s± struktury, staj± siê aktywnymi obiektami.
|
|
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #6 : Styczeñ 11, 2012, 12:10:37 » |
|
Przyk³ad w którym do zmiennych b, c zadeklarowanych jako private i protected nie moga byæ u¿yte w programie g³ównym , czyli poza klas±. Aby program kompilowa³ trzeba wy³±czyæ linijki z odwo³aniem do zmiennych w programie g³ównym.
#include <cstdlib> #include <iostream> using namespace std; class Nowa_klasa { public: int a; protected: int b; private: int c; }; int main(int argc, char *argv[]) {Nowa_klasa obiekt; obiekt.a = 2; //wolno obj.b = 3; //nie wolno obiekt.c = 4; //nie wolno system("PAUSE"); return EXIT_SUCCESS; }
|
|
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #7 : Luty 29, 2012, 11:43:40 » |
|
Zadanie 3. Zadeklarowaæ klasê Marta posiadaj±c± metody: konstruktora, destruktora, glos oraz w³a¶ciwo¶ci: masa typu int , kolor typu char. Nastêpnie zadeklarowaæ klasê malwina posiadaj±c± takie same metody i w³a¶ciwo¶ci jak marta ale dodatkow jeszcze metodê rysunek zwracaj±ca warto¶æ pust±.
using namespace std; class marta {public: marta(){}; ~marta(){}; void glos(){}; int masa; char kolor;}; class malwina{ public : malwina(){}; ~malwina(){}; void glos(){}; void rysunek(){}; int masa; char kolor; }; int main(int argc, char *argv[]) { system("PAUSE"); return EXIT_SUCCESS; }
|
|
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #8 : Luty 29, 2012, 11:46:47 » |
|
Zadanie 4. Podobnie jak poprzednio tylko klasa malwina jest potomkiem klasy marta.
#include <cstdlib> #include <iostream>
using namespace std; class marta {public: marta(){}; ~marta(){}; void glos(){}; int masa; char kolor;}; class malwina:public marta { void rysunek(){}; }; int main(int argc, char *argv[]) { system("PAUSE"); return EXIT_SUCCESS; }
|
|
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #9 : Luty 29, 2012, 12:36:54 » |
|
Zadanie 5. Napisaæ program w którym zadeklarowano klasê wie¿owiec. Klasa zawiera funkcjê: objêto¶æ, oraz zmienne: liczba piêter i powierzchnia piêtra. Nale¿y zadeklarowaæ obiekt wie¿a bêd±ca potomkiem klasy wie¿owiec . Nastêpnie w programie wprowadziæ z klawiatury warto¶ci liczby piêter i powierzchni i przez wywo³anie funkcji objêto¶æ obliczyæ kubaturê obiektu wie¿a.
#include <cstdlib> #include <iostream>
using namespace std; class wiezowiec {public: //wiezowiec(){}; konstruktor //~wiezowiec(){}; destruktor float objetosc(float a, float b){return (a*b);}; float liczba_pieter; float powierzchnia;}; int main(int argc, char *argv[]) {wiezowiec wieza; cout<<"Podaj liczbe pieter: "; cin>>wieza.liczba_pieter; cout<<endl<<"podaj powierzchnie uzytkowa: "; cin>>wieza.powierzchnia; cout<<"kubatura: "<<wieza.objetosc(wieza.liczba_pieter, wieza.powierzchnia)<<endl; system("PAUSE"); return EXIT_SUCCESS; }
|
|
« Ostatnia zmiana: Luty 29, 2012, 13:00:49 wys³ane przez admin »
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #10 : Marzec 07, 2012, 08:24:01 » |
|
Zadanie 6. W programie zadeklarowaæ klasê pies posiadaj±c± funkcje: konstruktora, destruktora, int szybko¶æ z argumentem x typu integer. Nastêpnie zadeklarowaæ klasê potomn± kot. W funkcji g³ównej zadeklarowaæ obiekt mysio bêd±cy potomkiem klasy kot.
#include <cstdlib> #include <iostream>
using namespace std; class pies {public: pies(){}; ~pies(){}; int szybkosc(int x){};};
class kot :public pies {};
int main(int argc, char *argv[]) {kot mysio; system("PAUSE"); return EXIT_SUCCESS; }
|
|
« Ostatnia zmiana: Marzec 07, 2012, 08:33:45 wys³ane przez admin »
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #11 : Marzec 07, 2012, 09:17:48 » |
|
Zadanie 7. Zadeklarowaæ klasê pojazd, klasa ma posiadaæ konstruktora, destruktora oraz dwie funkcje public: szybko¶æ posiadaj±c± argument int x, y. oraz zu¿ycie paliwa z argumentem (int z). private: karoseria typu void. Napisaæ klasê samochod potomn± do klasy pojazd posiadaj±ca dodatkowo metodê void wysokosc(void). W funkcji g³ównej zadeklarowaæ obiekt fiat klasy samochod. do funkcji szybko¶æ nale¿y wczytaæ z klawiatury warto¶ci zmiennych x,y.
#include <cstdlib> #include <iostream>
using namespace std; class pojazd {public: int szybkosc(int x,int y){return x*y;}; int zuz_pal(int z){return 2*z;}; pojazd(){}; ~pojazd(){}; private: void karoseria(void){};}; class samochod :public pojazd {void wysokosc(void){};};
int main(int argc, char *argv[]) {samochod fiat; int a,b; cout<< "podaj x:=";cin>>a; cout<< "podaj y:=";cin>>b; cout<<fiat.szybkosc(a,b); system("PAUSE"); return EXIT_SUCCESS; }
|
|
« Ostatnia zmiana: Marzec 07, 2012, 10:24:22 wys³ane przez admin »
|
Zapisane
|
|
|
|
admin
|
|
« Odpowiedz #12 : Marzec 07, 2012, 09:57:10 » |
|
Zadanie 8. Do poprzedniego zadania. zadeklarowaæ dwa obiekty fiat i opel. Dopisaæ porównanie które prosi o podanie zmiennych x,y dla dwóch obiektów fiat i opel i wy¶wiela wiêksza warto¶æ funkcji szybko¶æ.
#include <cstdlib> #include <iostream>
using namespace std; class pojazd {public: int szybkosc(int x,int y){return x*y;}; int zuz_pal(int z){return 2*z;}; pojazd(){}; ~pojazd(){}; private: void karoseria(void){};}; class samochod :public pojazd {void wysokosc(void){};}; int main(int argc, char *argv[]) {samochod fiat,opel; int a,b,c,d; cout<< "fiat podaj x:=";cin>>a; cout<< "fiat podaj y:=";cin>>b; cout<< "opel podaj x:=";cin>>c; cout<< "opel podaj y:=";cin>>d; if(fiat.szybkosc(a,b)<opel.szybkosc(c,d)){}; system("PAUSE"); return EXIT_SUCCESS; }
|
|
« Ostatnia zmiana: Marzec 07, 2012, 10:32:16 wys³ane przez admin »
|
Zapisane
|
|
|
|
|