Programmazione di sistema e progettazione orientata agli oggetti - cosa cercare [chiuso]

4

Il prossimo semestre (inizia tra poco meno di 5 settimane), sto prendendo la programmazione di sistema e OOD contemporaneamente. Apparentemente SP si occupa di lavorare in C su Linux, e ho solo l'esperienza di Java e Python, quindi sono un po 'nervoso per questo.

Per quelli di voi che li hanno frequentati in un'università, che cosa dovrei cercare?

Ho già preso l'organizzazione del computer che includeva una panoramica dell'Assemblea. Con l'eccezione dei loop di implementazione in assembly, sono passato da B + a A- nei progetti di assemblaggio. I circuiti di costruzione erano comunque un'altra storia.

    
posta Jason 01.12.2010 - 23:49
fonte

5 risposte

4

Bene, esattamente ciò di cui avrai bisogno dipenderà dalla classe, anche se probabilmente ci saranno alcune generalità. Suggerirei di ottenere un libro C destinato ai programmatori Java. È probabile che indichi le principali insidie e ti aiuti a passare.

Gli elementi più importanti di cui ti preoccuperai in C di cui non ti preoccupi veramente in Java sono i puntatori e la gestione della memoria. I riferimenti Java sono tecnicamente dei puntatori, ma sono dei veri e propri puntatori senza soluzione di continuità, e da quello che ho visto, i programmatori Java non li vedono realmente come i puntatori che sono e spesso hanno qualche problema a gestire i puntatori inizialmente. Andare di pari passo con questo è il fatto che non si ha un garbage collector, quindi tutto ciò che viene allocato nell'heap non solo deve essere allocato manualmente, ma sarà necessario ridistribuirlo manualmente quando si ' fatto con esso. Quindi, dovrai familiarizzare con malloc e free . Inoltre non si avranno classi e le strutture in C non possono avere funzioni in esse, quindi generalmente non si programma in C in modo orientato agli oggetti. Potrebbe essere o non essere un grosso problema per te. Significa, tuttavia, che ciò che imparerai nel tuo corso di programmazione dei sistemi e il tuo corso di progettazione orientato agli oggetti probabilmente sarà molto diverso.

L'OOD dovrebbe essere più un'estensione di ciò che sai, insegnandoti come programmare meglio in un modo orientato agli oggetti. La programmazione dei sistemi, d'altra parte, è molto più relativa alla discesa e alla sporcizia e sarà molto più di basso livello in ciò che riguarda. Entrambi sono davvero importanti per essere un buon programmatore però.

Senza conoscere le tue esatte competenze ed esperienze e senza conoscere i corsi esatti, dare consigli più dettagliati sarebbe difficile, ma in primo luogo, è probabile che il problema riguardi il modo in cui C non gestisce le cose per te e non cerca di tenerti al sicuro da te stesso. Dovrai essere più attenta a programmare in C di quanto tu possa essere in Java o Python. Ci sono molte cose che sono perfettamente legali C che sarebbero illegali in molte altre lingue e potrebbero sorprenderti. Le cose principali di cui preoccuparsi sono i puntatori e la gestione manuale della memoria.

    
risposta data 02.12.2010 - 00:20
fonte
2

Non temere: è solo codice

Java e C hanno una sintassi molto simile proveniente dalla stessa famiglia di lingue. Come altri hanno già detto, i tuoi più grandi ostacoli saranno gli indicatori di apprendimento (suggerimento: sono solo indiretti ) e gestione della memoria. All'improvviso tutti gli array che hai dichiarato nel tuo Java devono essere eliminati. Come ogni argomento, una volta che hai twigato di cosa si tratta, allora diventa improvvisamente semplice.

Nel complesso, si tratta più dell'apprendimento dell'ambiente in cui lavorerai piuttosto che della sintassi e dei costrutti del linguaggio. La programmazione Linux è molto diversa dalla programmazione generale Java. Si fa molto affidamento sulle API del sistema operativo, su tutti i puntatori e le strutture di C, e l'altro è in genere molto più semplice perché è a un livello più alto di astrazione, ce n'è molto di più.

Sviluppo della mentalità

Forse il modo in cui ti avvicini a questo è di mantenere due ambienti di lavoro come macchine virtuali (Parallels o VMware mi vengono in mente). Uno è puramente per lo sviluppo del codice C, l'altro per Java e non li mischia. È possibile utilizzare diversi temi per il desktop per rafforzare la diversa mentalità (nero per C, blu per Java o altro). Ogni volta che vieni a lavorare in uno o in altri ambienti hai molte indicazioni visive per promuovere la mentalità appropriata di cui hai bisogno per portare a termine il lavoro.

    
risposta data 02.12.2010 - 01:02
fonte
0

Ho sempre trovato difficile prendere lezioni con punti opposti nello stesso semestre.

Se la tua classe di sistemi è di livello molto basso probabilmente dovrai fare cose molto non OO.

Se riesci a mantenere i due pur essendo un buon momento per imparare i vantaggi di ciascun approccio.

La mia esperienza personale con le classi OOD era che dovevi andare a un livello teorico di astrazione per ottenere pieno credito e che le classi di sistema erano di solito più teoria del codice perché non era ragionevole costruire gran parte delle funzionalità del sistema operativo in un solo semestre.

    
risposta data 02.12.2010 - 00:19
fonte
0

Se non hai mai fatto alcun C o assemblatore, preparati a comprendere Java e Python a un livello completamente nuovo. Anche se hai già una lezione di sondaggi di composizione scientifica che ti ha detto come funzionano la memoria e le referenze, quasi certamente non la batti completamente.

Entra in esso con una mente aperta e un cuore aperto. C è una cosa bellissima, ma per niente allo stesso modo in cui Python è bello. È bello più nello stesso modo in cui un coltello da trincea è bello.

    
risposta data 02.12.2010 - 02:37
fonte
0

Per i sistemi devi andare basso. Devi capire come funzionano le cose fondamentali, la gestione della memoria, i registri, le chiamate di sistema, persino l'architettura di assemblaggio e di sistema ecc. OOPS è al livello più alto di astrazione. Quindi dovrai cambiare continuamente la tua prospettiva o piuttosto la trama dell'astrazione. Finché tieni questo in mente, non penso che dovrebbe essere così difficile.

    
risposta data 02.12.2010 - 04:33
fonte

Leggi altre domande sui tag