Adakah prinsip desain, praktik terbaik, dan pola desain yang diketahui yang dapat diikuti seseorang saat merancang proyek C? Atau prinsip desain yang berguna untuk pemrograman prosedural (imperatif) secara umum?
(Saya anak dari 'generasi berorientasi objek' dan harus merancang proyek C besar untuk pertama kalinya)
c
design-patterns
principles
Dimi
sumber
sumber
Jawaban:
Menyembunyikan informasi - seperti yang didukung oleh Parnas ( Software Fundamentals ).
Manajemen header dan visibilitas yang cermat:
Header dilindungi sendiri - jadi tidak masalah jika disertakan beberapa kali.
#ifndef HEADER_H_INCLUDED #define HEADER_H_INCLUDED ...rest of header contents, including other #include lines if necessary #endif /* HEADER_H_INCLUDED */
Rancang set fungsi untuk bekerja pada 'objek' (biasanya struktur) - dan gunakan fungsi tersebut daripada melihat-lihat bagian dalam struktur dalam kode yang menggunakannya. Anggap saja sebagai enkapsulasi yang dipaksakan sendiri.
sumber
Tiga saran saya:
Berikut contohnya:
typedef struct Vector { int size; int limit; int* ints; } Vector; Vector* Vector_new() { Vector* res = (Vector*) malloc(sizeof(Vector)); res->limit = 10; res->size = 0; res->ints = (int*) malloc(sizeof(int) * res.limit); return res; } void Vector_destroy(Vector* v) { free(v->ints); free(v); } void Vector_add(Vector* v, int n) { if(v->size == v->limit) { v->limit = v->limit * 2 + 10; v->ints = realloc(v->ints, v->limit); } v->ints[v->size] = n; ++v->size; } int Vector_get(Vector* v, int index) { if(index >= 0 && index < v->size) return v->ints[index]; assert false; }
sumber
malloc
.Ada buku online yang bagus dan gratis, berjudul Pemrograman Berorientasi Objek Dengan ANSI-C , yang membahas topik penulisan kode berorientasi objek di C. Penelusuran Google untuk "C berorientasi objek" juga menghasilkan sejumlah barang lainnya. contoh dan sumber daya.
Jika proyek Anda kritis terhadap keselamatan, MISRA-C adalah seperangkat aturan yang baik. Ini sebagian besar ditujukan untuk c tertanam, tetapi dapat berguna di area lain juga.
Saya menganggap diri saya seorang pembuat kode OO, dan saya melakukan banyak pekerjaan dengan embedded-C. Nasihat terbaik yang bisa saya berikan, terutama untuk proyek-proyek besar, adalah jangan berlebihan. Membuat kerangka kerja OO lengkap di atas ANSI C bisa sangat menggoda, tetapi membutuhkan banyak waktu dan upaya untuk membuatnya benar. Semakin menarik Anda, semakin banyak waktu yang Anda habiskan untuk men-debug kerangka kerja Anda daripada mengerjakan proyek sebenarnya . Dekati tugas dengan pikiran yang jernih, dan pemahaman YAGNI yang baik dan solid . Semoga berhasil!
sumber
{ }
blok mana pun ). Yang satu itu selalu menggigitku sekali atau dua kali:)
OOP adalah metodologi bukan teknologi. Jadi saran pertama saya adalah berhenti menganggapnya sebagai pemrograman prosedural.
Untuk poin e.James, Anda tidak ingin mencoba dan menciptakan kembali bahasa berorientasi objek atau berpura-pura bahwa Anda memiliki kemampuannya. Anda masih dapat melakukan semua hal yang benar dengan berpegang pada beberapa prinsip sederhana:
sumber