Domanda

Questa è una domanda piuttosto vaga, ma è qualcosa a cui non ho mai sentito è stata una risposta in modo soddisfacente quando si legge sul design adeguato.

Generalmente, quando si impara sulla programmazione orientata agli oggetti, l'astrazione, il factoring, ecc., Il santo graal del design - e il motivo per cui sostengono sempre di usare le tecniche di sviluppo in questione - è che renderà il tuo programma "facile da cambiare" , "mantenibile", "flessibile" o uno qualsiasi dei sinonimi utilizzati per esprimere un concetto così produttivo. Segnando Ivars privati, dividendo il codice in molti piccoli metodi autonomi, mantenendo le interfacce generali, si presume che si ottiene la possibilità di modificare il tuo programma con facilità e grazia totale.

Per cambiamenti relativamente piccoli, questo ha funzionato bene per me. Le modifiche alle strutture di dati interne utilizzate da una classe per aumentare le prestazioni non sono mai state una grande difficoltà, e nessuno dei due ha modifiche alla fine dell'interfaccia utente, indipendentemente dall'API, come la riprogettazione di un sistema di entrata di testo o la revisione della grafica per un elemento di gioco .

Tutti questi cambiamenti sembrano intrinsecamente autonomi. Nessuno di essi comporta modifiche al comportamento o alla progettazione del componente del programma modificato, per quanto riguarda il codice esterno. Indipendentemente dal fatto che tu stia scrivendo o meno in stile OO, con grandi funzioni o piccole, queste sono facili modifiche da apportare anche se hai solo un design moderatamente buono.

Tuttavia, ogni volta che i cambiamenti diventano grandi e pelosi, cioè i cambiamenti nell'API - nessuno dei miei preziosi "motivi" è mai arrivato in soccorso. Il grande cambiamento rimane grande, il codice interessato rimane interessato e molte ore di lavoro di spazzatura di bug si trovano davanti a me.

Quindi, la mia domanda è questa. Quanto è grande una modifica che afferma il design adeguato per essere in grado di facilitare? C'è qualche ulteriore tecnica di progettazione, a me sconosciuta o che non sono riuscito a implementare, che rende davvero semplice la modifica del suono appiccicoso, o è quella promessa (che ho sentito fatto da così tanti paradigmi diversi) semplicemente una bella idea, Completamente disconnesso dalle verità immutabili dello sviluppo del software? C'è uno "strumento di cambiamento" che posso aggiungere alla mia cintura degli strumenti?

In particolare, il problema che sto affrontando mi ha portato ai forum è questo: ho lavorato sull'implementazione di un linguaggio di programmazione interpretato (implementato in D, ma non è pertinente) e ho deciso che le argomentazioni delle mie chiusure dovrebbero essere Basato su parole chiave, piuttosto che posizionale come sono attualmente. Ciò richiede la modifica di tutto il codice esistente che chiama funzioni anonime, che, per fortuna, è piuttosto piccola perché sono all'inizio dello sviluppo della mia lingua (<2000 righe), ma sarei enorme se avessi preso questa decisione in una fase successiva. In una situazione del genere, esiste un modo che, in base alla corretta lungimiranza nel design, avrei potuto semplificare questa modifica o sono certi (la maggior parte) modifiche intrinsecamente di vasta portata? Sono curioso di sapere se questo è in qualche modo un fallimento delle mie capacità di progettazione - se lo è, sarei molto ansioso di migliorarle con il materiale di lettura necessario se c'è un modo per migliorare la gravità del problema.

Per essere chiari, non sono in alcun modo scettico su OOP o uno qualsiasi degli altri schemi comunemente in uso. Per me, tuttavia, le loro virtù sono nella scrittura originale, piuttosto che nel mantenimento, delle basi di codice. L'eredità ti consente di astrarre bene i modelli ripetitivi, il polimorfismo ti consente di separare il codice per funzione comprensiva dell'uomo (quale classe) piuttosto che con l'effetto di macchina (che ramo del switch Dichiarazione) e funzioni piccole e autonome ti consentono di scrivere in uno stile "bottom-up" molto piacevole. Tuttavia, sono scettico sulle loro affermazioni di flessibilità.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top