2009-07-16 2 views
10

I programmatori orientati agli oggetti sembrano divertirsi. Non solo sono trattati per le principali revisioni quadro ogni due anni, e nuovi e migliorati linguaggi ogni cinque, ma arrivano anche ad occuparsi di pratiche di progettazione su misura per il loro stile di programmazione. Dallo sviluppo basato sui test ai modelli di progettazione, i programmatori orientati agli oggetti hanno molto da fare.Come sono cambiate le tue idee sulle pratiche di programmazione C negli ultimi dieci anni?

Al contrario, il mondo di programmazione C sembra molto più tranquillo. L'ultima importante revisione della lingua è stata nel 1999, e la prossima probabilmente sarà molto meno impressionante. K & R 2a edizione è ancora presentata come un buon testo introduttivo da molti, nonostante abbia ormai vent'anni.

Se noi, in qualità di programmatori C, abbiamo sviluppato e migliorato le nostre capacità e pratiche (e penso che probabilmente lo abbiamo), non sembriamo essere molto bravi a comunicarli. Non vendiamo libri su di loro, pubblichiamo su di loro sui blog o organizziamo seminari intorno a loro. Non nel modo in cui il resto del mondo di sviluppo del software sembra.

Quindi, condividiamo.

Quali sono le tue pratiche di programmazione C "moderne" preferite?

Usi il `template 'libraries di macro preprocessore lunghe e coinvolte per spremere l'ultimo pollice di prestazioni dall'hardware nello stesso modo in cui i programmatori C++ possono? Utilizzi una libreria di allocazioni come halloc per ridurre al minimo il tempo speso per la gestione della memoria o usi un completo automatico garbage collector?

Naturalmente, se usi queste cose dal 1987, sentiti pure libero di suonare; il punto di questa domanda è di condividere pratiche fuori dall'ordinario, ma che potrebbero giovare agli altri.

Quali sono le pratiche di progettazione software C "moderne" preferite?

Le considerazioni di progettazione sono almeno altrettanto importanti, ovviamente. Adatti le pratiche di progettazione dal mondo orientato agli oggetti? Usi UML? Oppure si sceglie di appiattire le specifiche in uno stile neutro rispetto alla lingua (diagrammi di flusso, Z, calcolo precondizioni più debole, qualsiasi cosa)?

risposta

7

Cerco di utilizzare librerie già pronte per funzionalità di base quando possibile. Trovo che lo glib (parte dello GTK+ GUI framework) sia assolutamente eccezionale quando si tratta di strutture di dati generali e simili. Basta scrivere il proprio hash table, linked list, dynamic array o qualsiasi altra cosa.

Penso anche che le idee orientate agli oggetti nel toolkit GTK + siano grandiose e spesso strutturino il mio codice allo stesso modo. Non c'è niente che ti impedisca di adottare i paradigmi in C, è abbastanza flessibile per esprimere molte cose che sono state appena fatte "di prima classe" in altre lingue, anche se così spesso comporta una certa ... verbosità, ovviamente.

+0

Posso solo aggiungere che post come questo erano tra i tipi di risposte che avevo in mente quando componevo la domanda. –

2

1999: Usare C, è veloce, a basso livello, efficiente

2009: Usare Python, è veloce, abbastanza, produttivo, multi-piattaforma, popolare e divertente

+3

Odio sembrare un alesaggio, ma per altri poster che si sentono allo stesso modo, solo su C++/C#/ruby ​​/ Erlang/qualunque cosa, potresti modificare/modificare questa risposta? –

+0

"Abbastanza veloce" non lo è mai :) –

5
Non

davvero un C pratica di programmazione, perché io sono uno di quei programmatori orientati agli oggetti diavolerie che lavorano in C++, ma questo:

Object Oriented Programming non è un proiettile d'argento

Vorrei che la mia azienda ha avuto più puro I programmatori C insegnano ai giovani che c'è vita oltre l'Orientamento agli oggetti.

5

Per essere onesti, la mia risposta sarebbe che ho finalmente ceduto a C++ dopo aver combattuto per un lungo periodo. Sono venuto per apprezzare davvero i suoi vantaggi.

Mi piace essere in grado di consentire al compilatore di occuparsi dell'idraulico OO, di poter utilizzare eccezioni e RAII invece di riciclare codici di ritorno e rilasci di risorse dappertutto, non reimplementare un elenco collegato o un vettore espandibile automaticamente o più intelligente libreria di stringhe per l'ennesima volta, sovraccarico dell'operatore invece di vector_add() ovunque, ecc. Certo, ci sono librerie per gran parte di questo in C, ma sembra che tali cose siano piuttosto frammentate tra soluzioni concorrenti. È bello avere tali servizi standardizzati in C++.

La cosa bella è che sono ancora libero di scendere e fare tutte le cose che avrei potuto fare in C se ho sentito che è quello che si adatta meglio al programma. Non esiste una giacca rigida OO come in Java.