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
|
|
|
|
|