Scrivo le mie impressioni mentre leggo:
Beh, sulla parte relativa alla programmazione "imperativa" hai ciollato un po',
La programmazione imperativa, non e' OOP.
La programmazione imperativa e' un altro paradigma di programmazione.
Sono entrambi statement falsi. La programmazione imperativa è quel paradigma in cui un programma è pensato come una sequenza di istruzioni eseguite dall'elaboratore. La stragrande maggioranza dei paradigmi di programmazione fa parte della famiglia della programmazione imperativa (procedurale, strutturata, la stessa OOP). Per farti capire meglio alla programmazione imperativa si può contrapporre la *Funzionale*, ma non certo la OOP.
Tu lì stai parlando di programmazione procedurale e strutturata, non in genere di programmazione imperativa.
O, almeno, così vedo io la questione, probabilmente entrambe le visioni sono discutibili.
Fai molto riferimento al C:
e le procedure e le funzioni dichiarate sopra, in modo che possano essere visibili dal main.
Queste features sono relative al linguaggio, non al paradigma.
Quando dici che c'è una gestione della memoria di tipo LIFO specifica che stai parlando dello stack delle chiamate a funzione, messo così sembra che tutta la gestione della memoria sia così fatta (e non è vero).
Per la parte finale della seconda pagina, torno a ripetere, stai parlando di programmazione strutturata e procedurale parlando di istruzioni condizionali, cicli, e funzioni. Anche l'asm credo si possa annoverare tra i linguaggi a paradigma imperativo, eppure non ha queste features, spero di essere stato esplicativo ^^
Nella parte terza, di nuovo stai illustrando una feature del C++ e del Java rispetto al C, e non della OOP contro la procedurale in genere, le regole di visilibilità sono dipendenti dal linguaggio.
Quarta parte:
Sono dichiarate come 'private' perche' solo un rettangolo puo' accedere a quello stato.
Questo si può buttar giù meglio IMHO
In hava la diciarazione degli oggetti avviene nel seguente modo.
Piccolo bad typo
Per il resto quest'ultima pagina mi pare OK.