Sunteți pe pagina 1din 51

Programare orientata pe obiecte

Curs 1 - Introducere

C
++{};
C++ Acest curs
› Informatii despre curs si obiective
› Structura cursului si evaluare
› Bibliografie
› Istoric C++
› Hello, World!
› Tipuri de date
› Directive preprocesor
› Fisiere header
› C++ versus C
C++ Informatii despre curs
› Veti “sacrifica” 4 ore pe saptamana la scoala: 2 ore curs, 2
ore laborator, plus alte 4 ore suplimentare pentru proiect
(optional) si aprofundare
› Moodle:
– Prelegeri
– Laboratoare
– Exemple de cod (atunci cand este necesar)
– Proiect (optional)
– Bibliografie
– Alte materiale
C++ Obiective generale
› Educationale
– Asimilarea conceptelor ce stau la baza programarii orientate pe obiect
– Insusirea unui nou limbaj de programare: C++
– Insusire C++ Standard Library
› Rezultate
– Intelegerea teoriei si practicii programarii orientate obiect in general si a programarii C++ in
particular
› Aptitudini intelectuale
– Intelegerea si evaluarea logica a cerintelor si specificatiilor unui program
– Intelegerea ideilor complexe ale solutiilor de programare si raportarea acestora la probleme
particulare.
› Aptitudini particulare
– Abilitatea de a scrie un program procedural si orientat obiect in C/C++
› Aptitudin transferabile
– Abilitatea de rezolva probleme utilizand programarea si de a comunica rezultatele in scris.
C++ Obiectivele mele
› Sa intelegeti tehnica POO
› Sa intelegeti si sa scriti un cod sursa C++
– Este un curs de programare
– Este un curs de programare avansata (nu este C)
› Sa intelegeti ce face codul scris de voi
› Sa intelegeti cum sunt implementate anumite caracteristici ale C++
– Folositi C++ pentru viteza (altfel folositi limbaje mai facile), intelegeti probleme/facilitatile
pentru a cunoaste beneficiile
› Veti vedea
– Similaritati C, C++ si Java (si de ce)
– C++ basic – cele mai comune caracteristici
– Ce caracteristici avansate exista pentru a le avea in vedere
› Ce nu am sa predau/invat
– C
– Cum sa creati programe C++ pentru a satisface puritanii
C++ Structura cursului
› Structura
– C++ Basic (7 saptamani)
› Notiuni fundamentale C++
› Concepte POO exemplificate in C++
– C++ Avansat (7 saptamani)
› Programare generica
› C++ Standard Library
› Standards

› Imi rezev dreptul de a aduce modificari oricand acestui


curs si asupra modului de evaluare.
C++ Evaluare
› Laborator 40%– (80% - activitate laborator, 20% - media testelor S5 & S9)
minim nota 5
› Examen 60% - minim nota 5
› Proiect (optional) – 1 punct în plus la examenul practic cu precizarea ca
nota de examen nu poate depasi nota 10

› Nota finala:
N = L x 0.4 + E x 0.6
› unde
L = AL x 0.2 + ((TS5 + TS9) / 2) x 0.8, obs. minim 5
E = Exam + (Exam >= 8) x P x 0.1, obs. nu poate depasi nota 10
› Verificare cunoştinţe teoretice în caz de incertitudine (rotunjire în plus sau
în minus)
C++ Examen
› Durata: aproximativ 2 ore functie de complexitatea
subiectului
› Materia acoperita: tot ceea ce s-a prezentat la curs si
laborator si nu numai (daca nu va intat cum sa declarati o
variabila de tip predefinit asta nu inseamna ca nu am sa va
cer).
› Orice definiti (clase, functii membre etc) va trebui sa imi
aratati cum le folositi pentru a primi punctajul aferent.
Proiect cu functia int main {} duce la nepromovarea
examenului.
C++ Curs si laboratoare
› Curs – AC0-2
– Marti, 16:00 – 18:00
– Miercuri, 18:00 – 20:00
› Laboratoare – C02, C06
– Luni (8:00 – 10:00), (10:00 – 12:00)
– Joi (8:00 – 10:00), (12:00 - 14:00) , (14:00 - 16:00) , (16:00 -
18:00) , (18:00 - 20:00)
– Vineri , (8:00 - 10:00)
› Laboratorul din prima saptamana – recapitulare C utilizand
mediul de dezvoltare MS Visual C++
C++ Reguli
› Puteti sa aduceti laptopuri atat la curs cat si la laborator cu
conditia de a le folosi doar pentru a testa exemple de la
curs sau a rezolva problemele/cerintele de la laborator si
documentare.
› Nu aveti voie sa filmati fara acordul meu (conform
hotărârii Camerei Curții Europene a Drepturilor Omului
(CtEDO), emisă în data de 28 noiembrie 2017, care
stabilește că supravegherea video a sălilor de curs încalcă
dreptul la viața privată și la protecția datelor cu caracter
personal)
› Ma puteti “asalta” cu intrebari in timpul cursului doar
despre notiunile predate atunci
C++ Cerinte
› Algoritmi + reprezentare (scheme logice)
› Programare C
– Structura unui program in C
– Tipuri de date si moduri de reprezentare
– Functii – definitie si apel
– Structuri – definitie si utilizare
– Pointeri – declarare si utilizare
– Structuri de date – vectori, matrici etc.
C++ Ce trebuie (sau ar trebui) sa faceti
› Fiti prezenti al cursuri
› Incercati exemplele din cursuri si laboratoare
› Fiti prezenti la laboratoare (obligatoriu)
– Intrebati ce nu ati inteles la curs
– Rezolvati cerintele din laborator
– Incercati noi proiecte si cereti sfaturi
› Cititi si ce spun “Altii” despre C++: carti si site-uri web, dar
numai dupa ce ati citit cursul si laboratorul
› Incercati programele din cartile citite
› Modificati codul existent si observati efectele
› Cititi / lecturati cod scris de alti programatori: open source
C++ Feedback
› Cum stii cat de bine faci ceea ce faci?
› Utilizati la propriu sesiunile de laborator
– Cadrele didactice au parcurs si ele acest laborator din pozitia
voastra
– Veniti cu intrebari gata pregatite atat teoretice cat si practice
(programe realizate de voi)
› Ma puteti “asalta” cu intrebari inainte de curs si in pauza
despre orice probleme intampinate, neclaritati etc.
› Compilatorul este prietenul vostru
– obtineti un feedback imediat
– Verificati warning-urile la fel ca erorile
C++ Bibliografie
C++ Bibliografie
C++ Bibliografie
C++ Popularitate
C++ Popularitate
C++ C, C++, Java ?
› De ce sa invat C++ daca Java si C sunt mult mai populare

› Intrebare: Aveti idee?


C++ Motive pentru a invata C++
› Aproape toate limbajele de programare moderne si librariile populare sunt
construite in C/C++: Java, Javascript
› Performanta
› Ajuta la intelegerea teoriei fundamentale a calculatoarelor
› C/C++ pune lumea in miscare
– Majoritatea sistemelor de operare au kernelul scris in C: Windows, Linux, Mac, iOS,
Android
– Browser-ele moderne sunt scris in C/C++: Chrome, Firefox
– Motoarele de jocuri modern sunt scrise in C/C++: Unity3D, Unreal Engine, cocos2d-
x
– Compilatoare si interpretoare scrie in C/C++
› Provocarile de pe Topcoder sunt in C/C++
› Programatorii experimentati de C++ sunt mult mai bine apreciati in industrie
C++ Software quality
› Limbaj de programare – C++
› Librarii C++ - STL, BOOST, OpenCV
› Sabloane de proiectare – creationale, structural, comportamentale
› Compilatoare – MinGW, GCC, Borland C++, Microsoft Visual C++, Intel C++
› IDE – Eclipse, NetBeans, Code::Blocks, Dev C++, Microsoft Visual C++
› Analizor static de cod C/C++ - Cppcheck, Gimpel, Lint, Gcc, Coverty, Clang
› Profilers – Intel Vtune, AQTime,
› Testare automata – Google Test, Boost Test Library, Parasoft C/C++ test, Cppunit
› Integrare continua – Jenkins, TeamCity, Travis CI, Bamboo, Codeship
› Generatoare de documentatie din cod sursa – Doxygen, Liveedu, Pandoc
› Software Management tools – CVS, SVN, GIT, MERCURIAL, Bazaar
› Diagrame UML – Visio, Umodel, StarUML, Visual Paradigm
› Network-attached storage – Synology, QNAP
C++ Software quality
› SWEBOK – Guide to the Software Engineering Body of
Knowledge
› Writing Solide Code
› Naming conventions
› ADD – Architectural Design Document
› DDD – Detailed Design Document

› Project management – diagrame gantt, Trello, Jira,


Basecamp
C++ Free software & Open source
› GNU Project – initiat in 1983 de Richard Stallman
fondator Free Software Fundation

› Open source
C++ Istoria C/C++
› In laboratoarele Bell, este creat limbajul ‘B’ bazat pe BCPL (Basic
Combined Programming Language – limbaj de programare
procedural)
› 1971 – 1973: Dennis Ritchie extinde ‘B’ pentru a crea ‘C’.
› 1973 – 1980: Noi caracteristici sunt adaugate, se impune
standardizarea C-ului
› 1979: Bjarne Stroustrup (Bell Labs) extinde C pentru ‘C cu clase’
› 1982: ‘K&’R’ (Kernighan and Ritchie) propun, neoficial, C ‘standard’
› 1983: ‘C cu clase’ este redenumit in C++ si sunt adaugate noi
caracteristici
› 1989: ANSI standard C cunoscut si sub denumirea de C89
C++ Istoria C/C++
› 1992: Incepe standardizarea C++
› 1994: Standard Template Library este introdus in standardul ISO C++
› 1995: lansat Java de catre Sun
› 1998: ISO standard C++ (C++98)
› 1999: un nou standard C (C99)
› 2011: C++11
› 2013: C++13
› 2014: C++14
› 2017: C++17
› 2019: …
C++ Abordarea acestui curs
C++
C++ “Hello, World!”
//A hello world program in ANSI C //A hello world program in C++
#include <stdio.h> #include <iostream>

int main() using namespace std;


{
printf("Hello, World!"); int main()
return 0; {
} cout <<"Hello, World!";
return 0;
}
C++ “Hello, World!”

//A hello world program in C#


namespace HelloWorld
{
class Hello
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello, World!");
}
}
}
C++ “Hello, World!”

//A hello world program in Java


class HelloWorld
{
public static void main(String args [])
{
System.out.println("Hello, World!");
}
}

//A hello world program in Python


print (’Hello, World!’)
C++ Tipuri de date predefinite
DATA TYPE SIZE (IN BYTES) RANGE bool: tip de date boolean
short int 2 -32,768 to 32,767 folosit pentru memorarea
unsigned short int 2 0 to 65,535 valorilor booleene (true
unsigned int 4 0 to 4,294,967,295 sau false)
int 4 -2,147,483,648 to 2,147,483,647

long int 8 -2,147,483,648 to 2,147,483,647

unsigned long int 4 0 to 4,294,967,295

long long int 8 -(2^63) to (2^63)-1

unsigned long long int 8 0 to 18,446,744,073,709,551,615

signed char 1 -128 to 127

unsigned char 1 0 to 255

float 4

double 8

long double 12

wchar_t 2 or 4 1 wide character


int main()
{
cout << "Size of char : " << sizeof(char) << " byte" << endl;
C
++ cout << "Size of int : " << sizeof(int) << " bytes" << endl;
cout << "Size of short int : " << sizeof(short int) << " bytes" << endl;
cout << "Size of long int : " << sizeof(long int) << " bytes" << endl;
cout << "Size of signed long int : " << sizeof(signed long int)
<< " bytes" << endl;
cout << "Size of unsigned long int : " << sizeof(unsigned long int)
<< " bytes" << endl;
cout << "Size of float : " << sizeof(float) << " bytes" <<endl;
cout << "Size of double : " << sizeof(double) << " bytes" << endl;
cout << "Size of wchar_t : " << sizeof(wchar_t) << " bytes" <<endl;
return 0; Size of char : 1 byte
} Size of int : 4 bytes
Size of short int : 2 bytes
Size of long int : 8 bytes
Size of signed long int : 8 bytes
Size of unsigned long int : 8 bytes
Size of float : 4 bytes
Size of double : 8 bytes
Size of wchar_t : 4 bytes
C++ Directive preprocesor
› Sunt patru mari tipuri de directive preprocessor
– Macrouri
#define getmax(a,b) ((a)>(b)?(a):(b))

– Includere fisiere
#include <iostream> // Java import
#include “mylib.h”
// sau “mylib.hpp” sau “mylib”

– Compilare conditionata
– Altele (constante simbolice, includere conditionata etc.)
C++ Directive preprocessor – compilare conditionata
› #ifdef <NAME_OF_DEFINE>
<Include this code if there was a matching #define>
› #else
<Include this code if there was NOT a matching #define>
› #endif
C++ Directive preprocesor
› #define MAX_ENTRIES 100 // constante simbolice
› #undef MAX_ENTRIES

› #ifndef UNIQUE_DEFINE_NAME_FOR_FILE
› #define UNIQUE_DEFINE_NAME_FOR_FILE
//… include restul fisierului aici …
› #endif
ANSI C C++
Fis.h Fis.h
#ifndef __CONST__H #pragma once
#define __CONST__H
extern int i;
extern int i; void ff(int);
void ff(int); //...............continutul fisierului
//...............continutul fisierului
#endif
C++ Directive preprocessor
#include <stdio.h>
Ce ar trebui sa apara pe ecran
void func1();
void func2(); Inside func1()
Inside main()
#pragma startup func1 Inside func2()
#pragma exit func2
Ce apare pe ecran deoarece doar GCC
void func1() nu suporta #pragma startup si exit
{
printf(“Apel func1()\n"); Inside main()
}
void func2()
{
printf(“Apel func2()\n");
}
int main()
{
void func1(); //nu este apel de functie
void func2(); //nu este apel de functie
printf(“Apel main()\n");
return 0;
}
C++ Directive preprocesor
› #pragma warn
- rvl – ascunde avertizarile legate de lipsa return
- par – ascunde avertizarile legate argumente/parametric neutilizati
- rch – ascunde avertizarile legate de codul ce nu va fi executat
niciodata (ex. cel dupa return)
C++ Ce poate contine un fisier header
1) declaraţii de funcţii:
void ff(int);
extern void eroare (char *);

2) declaraţii de variabile:
extern int i;
extern double f;

3) definiţii de tipuri, enumerări:


typedef int lungime;
struct complex {
double re, im;
;
enum stare OFF, ON;
3) definiţii de tipuri, enumerări:
typedef int lungime;
C++ struct complex {
Ce poate contine un fisier header
double re, im;
;
enum stare OFF, ON;

4) definiţii de constante, dar nu masive


const char ESC = ’\ x1B’;

5) directive preprocesor
#include <stdio.h>
#define MAX 100

6) definiţii de funcţii inline, specifice limbajului C++


inline int increment (int i)
{
return ++i;
}
C++ Ce nu poate contine un fisier header
1) definiţii de variabile globale
int i = 100;
double f;

2) definiţii de funcţii, care nu sunt inline:


void eroare (char *mesaj)
{
printf ("\n %s\n", mesaj);
}

3) definiţii de masive (tablouri):


const int cifre [] = {0,1,2,3,4,5,6,7,8,9};
C++ Basic Input / Output in C++
› In C++ operatiile de intrare / iesire (relative la memorie)
sunt effectuate sub forma de secvente de octeti cunoscute
sub denumirea de streams (fluxuri de date)
– Input stream (flux de intrare) – directia datelor (octetilor) este de
la dispozitiv (tastatura, fisier) catre memorie
– Output stream (flux de iesire) – directia deatelor (octetilor) este
de la memorie catre dispositive (ecran, fisier)
› Fisiere header cu declarari ale acestor streamuri
– iostream – standard input/output stream, contine definiri ale
obiectelor cin (console input), cout (console output), cerr
(console error)
– fstream – file input/output stream
#include <iostream>
using namespace std;

C++ int main( )


{
char sir[] = “POO";
cout << sir << " – Programare Orientate pe Obiecte";
return 0;
}

#include <iostream>
using namespace std;
int main( )
{
int varsta = 0;
cout << “Ce varsta aveti: ”;
cin >> varsta;
cout << “Varsta ta este: << varsta;
return 0;
}
C++
#include <iostream>
#include <fstream>
using namespace std;
int main ()
{
char str[256] = {0};
ofstream fout;
ifstream fin;
fout.open (“Fileout.txt");
fin.open (“Filein.txt");
fin >> str;
fout << str;
fout.close();
fin.close();
return 0;
}
C++ C++ versus C
› C++ trebuie privit ca un nou limbaj de programare si nu ca
un C mai avansat
› In proiectarea C++ s-a avut in vedere “backward
compatibility”
C++ C++ versus C
› In C++ se obtine eroare de compilare daca este apelata o functie inainte de
definire, in C poate compila uneori

C compile OK C compile fail


#include<stdio.h> #include<stdio.h>
int main() int main()
{ {
f(); //apel inainte f(); //apel inainte
de definire de definire
} }

int f() charf()


{ {
printf("Hello"); printf("Hello");
return 0; return 0;
} }
C++ C++ versus C
› In C++ se obtine eroare de compilare daca un pointer
normal pointeaza catre o variabila constanta, dar in C este
permis, cel mult se obtine o avertizare
#include <stdio.h>

int main(void)
{
int const j = 20;
int *ptr = &j;

printf("*ptr: %d\n", *ptr);

return 0;
}
C++ C++ versus C
› In C, un pointer pe void poate fi direct asignat catre alti
pointeri, in C++ este necesar un typecast explicit

#include <stdio.h>
int main()
{
void *vptr;
int *iptr = vptr; //In C++, it must be replaced
//with int *iptr=(int *)vptr;
return 0;
}
C++ C++ versus C
› In C++ o variabila constanta trebuie initializata, in C nu
este necesar

#include <stdio.h>
int main()
{
const int a; // LINE 4
return 0;
}
C++ C++ versus C
› Caracterele sunt tratate diferit in C si C++
– In C – ‘a’, ‘b’ sun tratate ca int
– In C++ - ‘a’, ‘b’ sunt tratate ca fiind char
#include<stdio.h>
int main()
{
printf("%d", sizeof('a'));
return 0;
}

C sizeof('a') = 4
C++ sizeof('a') = 1
C++
› In C utilizarea unei structuri presupune utilizarea cuvantului
struct de fiecare data, in C++ nu este necesar
#include <stdio.h>
int T;

int main()
{
struct T { double x; }; // In C++, ascunde variabila globala T
// dar in C nu
printf("%d", sizeof(T));
return 0;
}
C++ C++ versus C
› Dimensiunile tipului de date boolean sunt diferite
// output = 4 in C (dimensiunea unui int)
printf("%d", sizeof(1==1));

// output = 1 in c++ (dimensiunea tipului de date boolean)


cout << sizeof(1==1);

S-ar putea să vă placă și