n° 219
Novembre 2017
Gennaio 16, 2018, 03:25:34 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Programmazione a oggetti  (Letto 3945 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
r34lg3n1u5
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 40


Mostra profilo E-mail
« inserita:: Marzo 18, 2013, 11:51:19 »

Buonasera,

sto cercando di imparare a programmare a oggetti...ho sempre ragionato e tutt'ora lo faccio in maniera procedurale...
Comunque, attualmente mi sto interessando a PHP ad oggetti, sto studiando da qualche settimana...ma nonostante le basi della teoria le so ( incapsulamento, ereditarietà, polimorfismo, classi etc etc ) quando mi trovo a dover iniziare a programmare...ad esempio connettermi a un DB MySql oppure prendere dei dati da un form... vado in pallone...( in maniera procedurale lo so fare )...
Inoltre vedo esempi che indicano a pensare alle classi, come entità reali nella vita(persone, animali, figure geometriche etc etc)...sono tutte entità che posso concretizzare nella mente,ma se devo fare una classe che modifica un file csv, oppure che mi si connetta a un DB...come posso identificare quale può essere l'oggetto?! Cioè non riesco a ragionare in maniera astratta senza identificare l'oggetto concretamente...Come poteri fare ?! Help!!! Sorriso
Registrato
paooolino
Full Member
***

Karma: +16/-10
Scollegato Scollegato

Messaggi: 383

Ideas in programming


Mostra profilo WWW
« Risposta #1 inserita:: Marzo 19, 2013, 12:38:16 »

Infatti, secondo me i libri sono fuorvianti.
Tutti fanno gli esempi dell'animale che fa i versi per spiegare il polimorfismo.
Ok, tante belle parole e tanta bella teoria. Ma in pratica?

Nella pratica, le classi ti permettono di organizzare il codice e di raggruppare alcune funzioni (metodi) che si occupano di gestire un certo aspetto del tuo programma.

Per esempio mi sono trovato varie volte a programmare dei siti o delle applicazioni in cui gli utenti dovevano fare login.

Mi trovavo a scrivere ogni volta le stesse funzioni per verificare l'esistenza dell'utente nel database, impostare i cookie, etc.

Così ho messo insieme tutte le funzioni necessarie, che prima utilizzavo in diversi files .php, in una unica classe.

Ho creato una classe Auth.php in modo tale che, quando l'utente effettua il login tramite il form, posso richiamare semplicemente il metodo

$auth->authenticate($usr, $pwd);

che effettua il controllo sui campi username e password del database e se l'utente esiste imposta dei cookie o delle variabili di sessione.

Come si accede al database? Basta prevedere delle proprietà della classe che contengono le credenziali per accedere al db. Queste variabili possono essere popolate nel costruttore della classe, oppure tramite dei semplici metodi set:

$auth->setDBhost("localhost"); ... etc

Poi all'inizio di ogni pagina che richiede il login utente, posso richiamare semplicemente:

$auth->checklogin()

che mi restituisce true se l'utente è autorizzato a vedere la pagina, sulla base dei cookie o delle variabili di sessione impostate dall'authenticate.

Per ultimo,
$auth->logout()

semplicemente cancella i cookie (o le variabili di sessione).

Tutto questo per dire: non pensare alle classi come ad oggetti reali ma a contenitori di codice che ti permettono di raggruppare insieme funzioni che si occupano di un compito in particolare, e che soprattutto (se ben progettate / parametrizzate) possono essere riutilizzate in più progetti.
Registrato

bertolottipf
Full Member
***

Karma: +4/-7
Scollegato Scollegato

Messaggi: 443


Mostra profilo E-mail
« Risposta #2 inserita:: Marzo 19, 2013, 10:55:22 »

Soprattutto questo perché PHP è un linguaggio che è nato non come ad oggetti.

Comunque la visione degli oggetti credo che arrivi quasi da una filosofia greca (Platone???) secondo cui tutto è la copia udi un concetto perfetto.

In informatica puoi creare tu una tua copia perfetta da usare.
Quando definisci una classe crei la copia perfetta e quando la istanzi ne crei una o più copie imperfette (anche se poi sono perfette).
Seguendo questo ragionamento la classe Uomo avrà proprietà età, altezza, peso, codfisc, ecc. e metodi del tipo getAltezza, setAltezza, setEtà, getEtà (detti accessori), cammina, riposa, ecc.Ovviamente metodi e proprietà le scegli tu ogni volta che vedi ciò che serve al programma per il tuo scopo.
La Dirigente e Dipendente avranno le stesse caratteristiche della classe Uomo e per non stare a scrivere più volte ciò che è già scritto si usano quelle di uomo aggiungendone di nuove più specifiche così facendo Polimorifsmo.

Tutto questo nella pratica si fa in modi differenti se si parla di C#, Java, Ruby, Tizio, Caio, Sempronio, e non per forza in tutte queste è obbligatorio che siano sempre esistenti. Per questo motivo bisogna poi prendersi il manuale del linguaggio che si è scelto di studiare e vedere come affrontare classi, polimorfismo, ereditarietà, ecc.
Registrato
paooolino
Full Member
***

Karma: +16/-10
Scollegato Scollegato

Messaggi: 383

Ideas in programming


Mostra profilo WWW
« Risposta #3 inserita:: Marzo 19, 2013, 12:19:13 »

Sì ma questo è già un passo oltre.

Nel 99% dei casi un "principiante" non ha necessità di utilizzare ereditarietà e polimorfismo. Soprattutto se non ha ancora ben chiaro che cosa sia un oggetto e come utilizzarlo nella pratica.

L'1% rimanente è il caso in cui lo studente debba fare un compito didattico assegnatogli da un professore.

La teoria è bella, si parla di uomini, dirigenti, dipendenti. Ma nella vita pratica di tutti i giorni con PHP si ha a che fare con connessioni db, elementi del DOM in pagina, chiamate a webservice.

In tutti i progetti su cui ho lavorato non ho mai sentito la necessità di utilizzare ereditarietà e polimorfismo. Creo la mia classe che fa una cosa, la fa bene, la fa in modo generale in modo da poterla riutilizzare e stop. I miei progetti non sono mai così grandi da giustificare (almeno per me) una progettazione così accurata, anche perchè nella pratica le specifiche iniziali non sono mai ben chiare e cambiano continuamente.

Quindi, se vuoi, il mio consiglio è: inizia a programmare ad oggetti senza preoccuparti di ereditarietà e polimorfismo, poi come secondo passaggio quando ne sentirai la necessità e avrai interiorizzato il modo di pensare a oggetti, preoccupati di questi altri concetti avanzati e certamente utilissimi.

Già il salto da procedurale a oggetti è grande, si deve fare un passo alla volta.

(tutto questo, secondo ME e in base alla mia esperienza).
Registrato

r34lg3n1u5
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 40


Mostra profilo E-mail
« Risposta #4 inserita:: Marzo 19, 2013, 12:53:34 »

Ok...grazie per i consigli Sorriso

Leggendo in giro sul web...dicono che per pensare in maniera OOP e poter sviluppare in PHP a oggetti...sarebbe il caso di imparare i design pattern come vmc...

Edit : Cmq sto studiando il Pattern Observer...concettualmente l'ho capito...ora mi metterò a ricrearlo da me...in effetti con i pattern impari metodi di risoluzione ad alto livello che puoi riutilizzare in base alle tue esigenze...all'inizio sarà sicuramente dura...ma credo che lo sforzo paghi...confermate?! Felice

Registrato
paooolino
Full Member
***

Karma: +16/-10
Scollegato Scollegato

Messaggi: 383

Ideas in programming


Mostra profilo WWW
« Risposta #5 inserita:: Marzo 19, 2013, 02:28:55 »

PHP a oggetti è una cosa.

Pattern MVC è un'altra. Che poi per utilizzare pattern MVC si utilizzi normalmente un linguaggio a oggetti, ci può stare.

Ma ripeto, non puoi imparare tutto e subito. Puoi anche procedere in parallelo e provare sia a creare un progettino PHP utilizzando OOP e contemporaneamente scaricare symfony e provare a utilizzarlo.

La miglior palestra è un progetto reale, dovresti decidere cosa vuoi realizzare e poi decidere attraverso quali linguaggi/tecnologie/framework. Studiando solo la teoria non ti scontri con i problemi reali di tutti i giorni.
 
Registrato

r34lg3n1u5
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 40


Mostra profilo E-mail
« Risposta #6 inserita:: Marzo 19, 2013, 07:17:31 »

Seguirò i tuoi consigli....ma per il framework per me è troppo per ora Felice

Grazie ancora
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines