Bunları düşünmenin anahtar kelimesi soyutlamadır .
Soyutlama, bir sistemin ayrıntılarını kasıtlı olarak görmezden gelmek anlamına gelir, böylece birçok alt sistemden daha büyük bir sistemi birleştirirken tek, bölünmez bir bileşen olarak düşünebilirsiniz. Düşünülemez derecede güçlü - bellek tahsisi ve kayıt dökülme ve transistör çalışma zamanlarının ayrıntılarını düşünürken modern bir uygulama programı yazmak idealize edilmiş bir şekilde mümkün olacak, ancak karşılaştırılamayacak kadar kolay değilonları düşünmek ve sadece üst düzey işlemleri kullanmak. Modern bilgi işlem paradigması, önemli ölçüde çoklu soyutlama düzeylerine dayanır: katı hal elektroniği, mikro programlama, makine talimatları, yüksek düzey programlama dilleri, işletim sistemi ve Web programlama API'ları, kullanıcı tarafından programlanabilen çerçeveler ve uygulamalar. Bugünlerde hiç kimse tüm sistemi anlayamadı ve bu duruma geri dönebileceğimiz akla gelebilecek bir yol bile yok.
Soyutlamanın kapak tarafı güç kaybıdır. Ayrıntılarla ilgili kararları daha düşük seviyelere bırakarak, genellikle düşük verimlilikle verilebileceğini kabul ediyoruz, çünkü daha düşük seviyeler 'Büyük Resim'e sahip değildir ve çalışmalarını sadece yerel bilgi ile optimize edebilir ve (potansiyel olarak) değildir. bir insan olarak zeki. (Genellikle, isntance için, HLL'yi makine koduna derlemek, günümüzde işlemci mimarisi çok karmaşık hale geldiğinden, makineler tarafından en bilgili insanlardan bile daha iyi yapılmaktadır .)
Güvenlik konusu ilginç bir konudur, çünkü soyutlamadaki kusurlar ve 'sızıntılar' genellikle bir sistemin bütünlüğünü ihlal etmek için kullanılabilir. Bir API, A, B ve C yöntemlerini çağırabileceğinizi varsayar, ancak yalnızca X koşulu geçerliyse, koşulu unutmak ve koşul ihlal edildiğinde gerçekleşen serpinti için hazırlıksız olmak kolaydır. Örneğin, klasik arabellek taşması, bu özel bellek bloğunu kendiniz tahsis etmedikçe bellek hücrelerine yazmanın tanımsız davranış sağladığı gerçeğinden yararlanır. API yalnızca bir şeyinsonuç olarak ortaya çıkacaktır, ancak pratikte sonuç, bir sonraki alt seviyedeki sistemin detayları ile tanımlanmaktadır - ki bu kasten unutmuşuzdur! Koşulu yerine getirdiğimiz sürece, bunun önemi yoktur, ancak değilse, her iki seviyeyi de yakından anlayan bir saldırgan genellikle tüm sistemin davranışını istendiği gibi yönlendirebilir ve kötü şeylerin olmasına neden olabilir.
Bellek ayırma hataları durumu özellikle kötüdür, çünkü büyük bir sistemde tek bir hata olmadan belleği manuel olarak yönetmek gerçekten, gerçekten zor olmuştur. Bu başarısız bir soyutlama vakası olarak görülebilir: C ile ihtiyacınız olan her şeyi yapmak mümkün olsa damalloc
API, basitçe kötüye kullanımı kolaydır. Programlama topluluğunun bazı bölümleri artık bunun sisteme bir seviye sınırı getirmenin yanlış bir yer olduğunu düşünüyor ve bunun yerine otomatik bellek yönetimi ve çöp toplama ile dilleri teşvik ediyor, bu da biraz güç kaybediyor, ancak bellek bozulmasına ve tanımlanmamış davranışlara karşı koruma sağlıyor . Aslında, günümüzde hala C ++ kullanmanın önemli bir nedeni, tam olarak hangi kaynakların ne zaman edinildiğini ve serbest bırakıldığını kontrol etmenize izin vermesidir. Bu şekilde, bugün yönetilen ve yönetilmeyen diller arasındaki ana şema, bir soyutlama katmanının tam olarak nerede tanımlanacağı konusunda bir anlaşmazlık olarak görülebilir.
Aynı şey, bilgisayar kullanımındaki diğer birçok alternatif paradigma için de söylenebilir - sorun, büyük sistemlerin inşa edilmesi gereken her zaman ortaya çıkıyor, çünkü bugün yaygın olan karmaşık gereksinimler için çözümleri sıfırdan tasarlayamıyoruz. (Bugünlerde AI'da ortak bir bakış açısı, insan beyninin aslında böyle çalıştığıdır - aralarında basit, soyutlanmış arayüzlere sahip ayrı modüller ve katmanlar yerine geri bildirim döngüleri, büyük ölçüde birbirine bağlı ağlar vb. kendi istihbaratımızı simüle etmede çok az başarılı oldu.)