Abstraksi dan Generalisasi Abstraksi adalah penekanan pada gagasan, kualitas dan properti, bukan pada detail tertentu (penekanan pada detail) Generalisasi adalah perluasan dari aplikasi yang mengarah pada domain yang lebih besar dari obyek yang sama atau tipe yang berbeda
Binding Obyek yang terikat pada nama disebut bindables (terikat) pada bahasa Yang termasuk bindable adalah: data primitif, nilai kumpulan, referensi ke variabel, tipe-tipe, dan abstraksi yang executable
Jenis-jenis binding Collateral binding melakukan binding secara terpisah satu sama lainnya dan kemudian menggabungkan binding-binding itu untuk menghasilkan sekumpulan lengkap binding Sequential binding melakukan binding dalam urutan kemunculan mereka Recursive binding adalah binding di mana nama-nama yang di dalamnya terikat dipergunakan (langsung atau tidak langsung) di bindingnya itu sendiri
Enkapsulasi Sebuah modul umumnya terdiri dari dua bagian: bagian ekspor dan bagian lokal Bagian ekspor dari sebuah modul terdiri dari deklarasi bahasa untuk simbol-simbol yang tersedia untuk digunakan dalam bagian modul dan modul lain yang mengimpornya dan deklarasi modul yang memberikan simbol dari modul lain yang tersedia untuk digunakan dalam bagian modul dan dalam modul lain yang mengimpornya
Prinsip Generalisasi Sebuah generik adalah sebuah entitas yang bisa dikhususkan (dijabarkan lebih jauh) terhadap invokasi Prinsip analogi: Ketika ada kecocokan pola antara dua obyek berbeda, obyek-obyek ini bisa digantikan oleh sebuah obyek yang diberikan parameter untuk memungkinkan rekonstruksi obyek-obyek aslinya Prinsip parameterisasi sebuah parameter dari sebuah generik bisa terbentuk dari domain
Substitusi Penggunaan abstraksi dan generalisasi bergantung pada substitusi. Ikatan keduanya terkandung pada prinsip berikut: Prinsip Korespondensi: Mekanisme binding parameter dan mekanisme definisi adalah setara
Struktur Blok Sebuah blok adalah sebuah konstruksi yang membatasi cakupan definisi yang terkandung di dalamnya Ada tiga dasar struktur blok: monolitik, flat dan nested Syntax blok: let Definitions in Body end Body where Definitions
Struktur Blok Syntax di atas menyatakan dua tipe blok, yang pertama membutuhkan definisi sebelum body dan yang kedua membutuhkan definisi sesudah body Monolitik hanya terdiri dari satu blok saja Flat body nya bisa saja mengandung blok-blok tambahan tetapi blok bagian dalam tidak mengandung blok Nested jika blok-blok dimungkinkan untuk bersarang (nested) di dalam blok lain
Aturan Cakupan (Scope) Tindakan mempartisi sebuah program mengangkat masalah cakupan nama-nama Ada empat pilihan: Semua nama tersedia secara global Semua nama eksternal tersedia secara lokal Hanya nama-nama yang diekspor secara eksplisit tersedia secara global Hanya nama-nama eksternal yang diimpor secara eksplisit yang tersedia secara lokal
Aturan Cakupan (Scope) Aturan cakupan dinamis menentukan cakupan masing-masing asosiasi dalam hal dinamisasi eksekusi program Aturan cakupan statis disebut juga aturan cakupan leksikal
Prosedur dan Fungsi Sebuah program bisa saja terdiri dari sebuah program utama yang pada saat eksekusi memanggil subprogram yang pada gilirannya bisa saja memanggil subprogram lain, dan seterusnya. Setiap subprogram bisa memiliki data lokalnya sendiri yang bisa ditemukan dalam record aktivasi
Parameter dan Argumen Sebuah generik dikatakan strict dalam sebuah parameter jika dia membutuhkan nilai parameter dan non-strict dalam sebuah parameter jika dia tidak membutuhkan nilai dari parameter Evaluasi lazy adalah sebuah skema evaluasi di mana argumennya dievaluasi hanya pada saat dibutuhkan
Mekanisme Pemasukkan Argumen Mekanisme penggandaan mengharuskan nilai-nilai dikopi ke sebuah generik ketika dia dimasukkan dan dikopi keluar dari generik ketika generik dihentikan. Bentuk pemasukkan parameter ini sering disebut passing by value.
Mekanisme Pemasukkan Argumen Mekanisme definisi seakan-akan abstrak itu dikelilingi oleh sebuah blok di mana di dalamnya ada sebuah definisi yang mengikat parameter ke argumen itu. Sebuah parameter dikatakan passed by reference jika argumennya adalah sebuah address
Cakupan dan Blok Sebuah variabel yang dideklarasikan dalam sebuah blok memiliki jangka waktu hidup (lifetime) dimulai dari sebuah record aktivasi diciptakan untuk blok itu hingga record aktivasi itu dihapus