Apa proses berpikir berorientasi objek? [Tutup]

9

Saya telah mempelajari OOP bersamaan dengan implementasi MVC Zend selama beberapa bulan terakhir. Saya cukup baru dalam pemrograman, tetapi saya merasa sangat kuat bahwa saya harus mempelajari berbagai hal dengan cara yang 'benar', yang bagi saya berarti memastikan saya memahami mengapa segala sesuatunya dilakukan sebagaimana adanya. Yaitu, saya telah menemukan bahwa dalam mempelajari cara melakukan sesuatu (apa saja, katakan musik), cara terbaik untuk belajar bagaimana melakukan sesuatu adalah dengan mengetahui mengapa hal itu dilakukan dengan cara itu.

Bagaimanapun, saya telah berjuang sangat keras dengan memahami bagaimana mengembangkan model bisnis saya sendiri (yaitu, M dari MVC), dan saya telah memutuskan itu bukan karena saya tidak mengerti OOP secara umum, karena saya telah mempelajarinya untuk beberapa berbulan-bulan dan saya tidak berpikir konsepnya sangat sulit untuk dipahami. Saya menemukan contoh-contoh yang saya pelajari sangat intuitif. Masalahnya bagi saya, saya pikir, terletak pada proses menerjemahkan masalah saya sendiri menjadi solusi berorientasi objek. Contoh-contoh dalam buku (yang telah saya baca sejauh ini) terlalu jelas, sehingga proses menerjemahkan masalah menjadi objek tidak terlalu sulit. Apa yang saya pikir mungkin saya lewatkan adalah proses abstrak tingkat tinggi. Semacam daftar langkah atau pertanyaan yang harus dijawab oleh setiap solusi berorientasi objek pada level tertinggi.

Jika Anda harus menggambarkan proses seperti itu dalam tidak lebih dari lima langkah, akan seperti apa mereka dan mengapa? Apa proses yang paling efektif dalam menerjemahkan masalah menjadi solusi berorientasi objek?

Insinyur Dunia
sumber
1
OOP tidak selalu seperti itu ...
Ayub
Dalam mempelajari OOP, apakah Anda sudah membaca tentang pola desain ?
Zoredache
1
Saya sarankan Anda membaca buku Eric Evan tentang Domain Driven Design ketika Anda kesulitan membuat model. Lihat juga jawaban @Simon Stellings. Buku ini membahas proses ini dengan cukup rinci.
Falcon
@Zoredache Saya telah menemukan konsep pola desain, serta beberapa contoh dari beberapa, seperti singleton, factory, dan MVC itu sendiri (yang, dalam implementasi Zend juga front controller). Namun, itu adalah langkah saya selanjutnya, untuk berbicara. Saya mengambil buku Martin Fowler tentang pola perusahaan dan saya hanya membaca bagian dari pendahuluan sejauh ini. Apakah pengantar yang jelas dan mudah dibaca yang Anda rekomendasikan?
@ Falcon Saya punya pertanyaan tentang php / MySQL dan format tanggal di SO hari yang lain, dan saya akan memilih jawaban Anda tetapi itu hanya komentar, untuk apa nilainya.

Jawaban:

10

Menemukan model yang cocok tidak selalu mudah. Ini adalah salah satu dari hal-hal ini yang membutuhkan lebih banyak pengalaman daripada pengetahuan biasa. Namun, resep sederhana berikut mungkin dapat membantu Anda mengatasi gangguan mental awal.

Awalnya dijelaskan dalam makalah ini oleh Abbott dan sering disebut sebagai "analisis tekstual Abbott".

  1. Tulis spesifikasi teks biasa.
  2. Identifikasi kelas: Kata benda adalah kandidat yang baik.
  3. Temukan atribut: Kata sifat / kata keterangan adalah kandidat yang baik.
  4. Temukan operasinya: Kata Kerja adalah kandidat yang baik.
  5. Temukan asosiasi antar kelas.
  6. Menyaring.

Contoh:

Kata benda , kata kerja dan adjectivesditandai.

The perpustakaan berisi buku-buku dan jurnal . Mungkin ada beberapa salinan buku yang diberikan . Beberapa buku hanya untuk short-term pinjaman . Semua buku lain dapat dipinjam oleh anggota perpustakaan selama tiga minggu. Anggota perpustakaan biasanya dapat meminjam hingga enam item sekaligus, tetapi anggota staf dapat meminjam hingga 12 item sekaligus. Hanya anggota staf yang dapat meminjam jurnal .

Iterasi analisis pertama akan menghasilkan:

Kelas:

  • Perpustakaan
  • Buku, Jurnal
  • Salinan
  • Pinjaman
  • Anggota Perpustakaan
  • Barang
  • Anggota staff

Mulai dari sini, Anda dapat berpikir tentang kelas mana yang memerlukan atribut dan metode untuk mengimplementasikan perilaku dan kemudian memperbaiki model tersebut.

blubb
sumber
1
Jawaban yang bagus. Selain makalah Abbott, saya merekomendasikan buku Eric Evan tentang Domain Driven Design . Ini mengajarkan cara membuat bahasa umum untuk proyek dan bagaimana menyaring model yang kuat dari itu.
Falcon
Saya tertarik pada jawaban ini karena saya sedikit belajar linguistik dan itu masuk akal bagi saya tanpa banyak usaha, tetapi saya takut akan hal itu karena alasan yang sama karena saya telah menemukan bahwa terlalu banyak analogi dapat membuat saya tersesat .
@ Falcon +1 untuk merekomendasikan buku dengan cover art Kandinsky.
@ tbj1982: Anda memang benar. Ini adalah heuristik sederhana, dan hasilnya harus diperlakukan dengan itu dalam pikiran. Ini bukan peluru emas, tetapi mungkin merupakan starter yang bermanfaat.
blubb
4

Menurut pendapat saya, mengambil pendekatan TDD adalah alami dan efisien:

  1. Tuliskan persyaratan khusus (Diberikan, Kapan, Lalu)
  2. Terjemahkan masing-masing persyaratan (yang terpenting terlebih dahulu) ke dalam unit test.
  3. Tulis jumlah kode paling sedikit untuk lulus tes yang ditulis dalam # 2.
  4. Setelah lulus tes, perbaiki kode Anda sesuai dengan prinsip desain SOLIDD.
  5. Setelah # 4, pastikan kode Anda masih lulus semua tes tertulis.
  6. Ulangi 2-5.

Dengan proses ini, Anda dapat secara bertahap menghasilkan kode yang dapat diuji dengan desain suara. Anda mungkin berpikir pada awalnya bahwa tes menulis tidak perlu tetapi aktivitas itu sebenarnya membantu Anda membangun arsitektur suara.

Tae-Sung Shin
sumber
3

Berikut langkah-langkah yang saya gunakan dalam kode c ++:

  1. tentukan nama kelas
  2. memutuskan parameter konstruktor dan anggota data.
  3. memutuskan nama fungsi anggota dan prototipe
  4. membuatnya independen dari kelas lain
  5. Desain selesai, dan yang lainnya hanyalah implementasinya.

Alasan untuk (1) adalah bahwa ia mendefinisikan ruang lingkup apa fungsi milik kelas. Alasan untuk (2) adalah bahwa ia mendefinisikan bagaimana kelas berkomunikasi dengan dunia luar. Alasan untuk (3) adalah bahwa ia mendefinisikan bagaimana memilih fungsionalitas kelas yang diperlukan dalam setiap situasi. Alasan untuk (4) adalah memungkinkan kelas digunakan dalam banyak situasi yang berbeda. Alasan untuk (5) adalah bahwa ia mendefinisikan batas antara desain dan implementasi.

tp1
sumber
+1 untuk penamaan. Sungguh menakjubkan betapa banyak hanya menambahkan nama dapat mengatur proses berpikir, karena Anda secara implisit membawa semua pengetahuan tentang "dunia nyata" dengannya.
Mark Brackett