Dalam Konstruksi Perangkat Lunak Berorientasi Objek Meyer (1988) ia mendefinisikan prinsip terbuka / tertutup sebagai berikut:
- Modul akan dikatakan terbuka jika masih tersedia untuk perpanjangan. Misalnya, harus dimungkinkan untuk menambahkan bidang ke struktur data yang dikandungnya, atau elemen baru ke set fungsi yang dijalankannya.
- Modul akan dikatakan tertutup jika tersedia untuk digunakan oleh modul lain. Ini mengasumsikan bahwa modul telah diberikan deskripsi yang stabil dan terdefinisi dengan baik (antarmuka dalam arti menyembunyikan informasi).
Dia melanjutkan dengan mengatakan:
Jika Anda membuka kembali modul, Anda juga harus membuka kembali semua kliennya untuk memperbaruinya, karena mereka bergantung pada versi yang lama. ... [Masalah ini] muncul setiap kali sebuah modul harus diperluas oleh fungsi atau elemen data baru, memicu perubahan pada klien langsung dan tidak langsung. ... Dengan pendekatan klasik untuk desain dan pemrograman, tidak ada cara untuk menulis modul yang terbuka dan tertutup.
Solusi Meyer untuk dilema ini adalah: jangan pernah memperluas modul perpustakaan dengan memodifikasi kelas yang ada; sebagai gantinya, tulis modul baru yang mensubkelaskan kelas yang ada, dan minta klien baru bergantung pada modul baru itu.
Sekarang, pada tahun 1988, saya menulis program mainan (prosedural) di Turbo Pascal dan Blankenship Basic, dan pengalaman profesional abad ke-21 saya adalah pada JVM, CLR, dan dalam bahasa yang dinamis, jadi saya tidak tahu apa yang dimaksud Meyer oleh "pendekatan klasik untuk desain dan pemrograman".
Salah satu contoh konkret Meyer tentang mengapa modul klien harus dibuka kembali (pernyataan beralih pada enumerasi yang sekarang memiliki lebih banyak anggota, membutuhkan lebih banyak kasus) tampaknya cukup masuk akal, tetapi ia hampir tidak membenarkan pernyataan bahwa setiap kali Anda menambahkan fungsionalitas ke perpustakaan modul, Anda perlu memperbarui semua kliennya .
Apakah ada alasan historis bahwa pernyataan ini tampak jelas pada tahun 1988? Apakah, katakanlah, menambahkan fungsi atau struktur data ke pustaka C statis mengubah tata letak sedemikian rupa sehingga bahkan dengan API yang kompatibel mundur, klien harus dikompilasi ulang? Atau apakah Meyer benar-benar hanya berbicara tentang mekanisme untuk menegakkan kompatibilitas API?