Perché risolvere un problema con una classe e non una funzione?

-5

Sono un nuovo programmatore, specialmente in C ++.

All'inizio ho imparato come creo le funzioni (è stato fantastico).

Ma ora che ho imparato a conoscere classi (e oggetti) sono così confuso ... quando dovrei usarli? Cosa li rende più efficienti delle funzioni?

Molti problemi di esempio cerco di risolvere usando le funzioni, non le classi.

È buono o cattivo?

C'è un buon esempio di problema che non dovrebbe essere risolto usando le funzioni e dovrebbe essere risolto usando le classi? Qualcosa che chiarirà i benefici dell'uso delle classi?

    
posta Hegazy Tarek 23.04.2017 - 22:21
fonte

3 risposte

2

Scopri cos'è una classe e capirai dove e quando usarli.

In generale: dovresti creare una classe quando hai più "oggetti" di un tipo.
Per esempio. è possibile memorizzare ore, minuti e secondi di più volte utilizzando 3 array, oppure è possibile memorizzarli in una matrice di DateTime, in cui tutto è incapsulato e appartiene insieme.
Gli oggetti di una classe saranno usati nelle normali funzioni allo stesso modo di altre variabili.

    
risposta data 24.04.2017 - 19:11
fonte
1

Le classi sono più utili quando sono utilizzate per proteggere gli invarianti . Gli invarianti sono condizioni su una o più variabili che devono essere sempre soddisfatte dal programma. Per esempio. chiamare size() su std::vector genererà sempre il numero di elementi memorizzati nel vettore, indipendentemente dalle operazioni che abbiamo eseguito. Se, invece, dovessi memorizzare un puntatore al primo e all'ultimo elemento di un array dinamico, dovrai controllare tutto il codice usando queste variabili per essere sicuro che la dimensione sia calcolata correttamente.

    
risposta data 24.04.2017 - 23:29
fonte
0

La domanda suggerisce che entrambe le classi e le funzioni non possono essere usate insieme, questo non è vero. Tratterò il livello più basilare delle funzioni qui dal suggerita domanda duplicata copre altri vantaggi / usi delle classi rispetto alle funzioni statiche .

Nelle classi di livello più elementare è sufficiente memorizzare uno stato in modo che possa essere passato da e verso le funzioni. Tieni presente che gli esempi si trovano in C #, ma ciò non dovrebbe influire sulla risposta o sulla comprensione.

public IEnumerable<OrderDetail> GetOrderDetailsForDisplay(string sapCustomerID, DateTime deliveryDate, string orderType)
{
    ...
}

public IEnumerable<OrderDetail> GetOrderDetailsForDisplay(Order order)
{
    ...
}

La prima funzione sopra non usa una classe nel suo elenco di parametri, dandoci 4 parametri. La seconda funzione sopra appena passa un oggetto ordine poiché i parametri sapCustomerID, deliveryDate e orderType descrivono un ordine.

Allo stesso modo, l'immagine se la funzione (s) di cui sopra non ha restituito un insieme di oggetti OrderDetail . La classe OrderDetail ha molte proprietà ad essa associate (vedi sotto).

public class OrderDetail
{
    public long ID { get; set; }
    public long OrderID { get; set; }
    public int ProductID { get; set; }
    public short Quantity { get; set; }
    public bool IsClosed { get; set; }
    public DateTime DeliveryDate { get; set; }
    public DateTime BranchDeliveryDate { get; set; }
    public DateTime TransferToSAPOn { get; set; }

    public string CreatedBy { get; set; }
    public DateTime CreatedOn { get; set; }
    public string ModifiedBy { get; set; }
    public DateTime? ModifiedOn { get; set; }

    public int? InventoryQuantity { get; set; }
    public bool IsProductAvailable { get; set; }
}

Quindi potresti vedere come dover restituire questi numerosi campi / valori potrebbe essere noioso o difficile.

Per ulteriori informazioni su questo argomento, suggerisco di rivedere i collegamenti forniti nei commenti da gnat e CandiedOrange . Spero che questo aiuti a rispondere alla tua domanda almeno un po '.

    
risposta data 24.04.2017 - 16:06
fonte

Leggi altre domande sui tag