§1 Dil hakkında genel bilgiler. Program tasarımının aşamaları

Yaratılış tarihi

Dil, 1980'lerin başında Bell Labs çalışanı Björn Stroustrup'un kendi ihtiyaçları için C dilinde bir dizi iyileştirme ortaya koymasıyla ortaya çıktı. Stroustrup 1970'lerin sonunda Bell Laboratuarlarında kuyruk teorisindeki problemler (modellemeye uygulandığı şekliyle) üzerinde çalışmaya başladığında telefon çağrıları), o dönemde mevcut olan modelleme dillerini kullanma girişimlerinin etkisiz olduğunu ve yüksek verimli makine dillerinin kullanımının sınırlı ifade gücü nedeniyle çok zor olduğunu buldu. Bu nedenle Simula dili, büyük ölçekli geliştirmeler için çok yararlı olacak özelliklere sahiptir. yazılım, ancak çok yavaş ve BCPL yeterince hızlı, ancak düşük seviyeli dillere çok yakın ve büyük yazılım geliştirmeye uygun değil.

Tezindeki deneyimi hatırlatan Stroustrup, C dilini (BCPL'nin halefi) Simula dilinde mevcut olan yeteneklerle desteklemeye karar verdi. Bell bilgisayarların üzerinde çalıştığı UNIX sisteminin temel dili olan C, hızlı, zengin özelliklere sahip ve taşınabilirdir. Stroustrup, sınıflar ve nesnelerle çalışma yeteneğini ekledi. Sonuç olarak, pratik modelleme problemlerinin hem geliştirme süresi (Simula benzeri sınıfların kullanımı sayesinde) hem de hesaplama süresi (C hızı sayesinde) açısından çözülmesinin mümkün olduğu ortaya çıktı. Öncelikle C'ye sınıflar (kapsüllemeli), sınıf kalıtımı, güçlü tür kontrolü, satır içi işlevler ve varsayılan argümanlar eklendi. Başlangıçta "sınıflı C" olarak adlandırılan dilin ilk versiyonları 1980'de kullanıma sunuldu.

Stroustrup, C'yi sınıflarla geliştirirken, yeniden çalışan bir çevirmen olan programı önden yazdı. kaynak Basit C'nin kaynak koduna sınıflar içeren C. Bu, C'de geliştirme için UNIX'te zaten mevcut olan altyapıyı kullanarak yeni bir dil üzerinde çalışmayı ve onu pratikte kullanmayı mümkün kıldı. Yeni dil, yazar için beklenmedik bir şekilde büyük kazanç elde etti meslektaşları arasında popülerlik kazandı ve kısa süre sonra Stroustrup artık binlerce soruyu yanıtlayarak ona kişisel olarak destek veremez hale geldi.

Björn Stroustrup, C++'ı oluştururken şunu istedi:
  • Statik veri türlerine, C dilinin verimliliğine ve taşınabilirliğine sahip genel amaçlı bir dil edinin.
  • Prosedürel programlama, veri soyutlama, nesne yönelimli programlama ve genel programlama dahil olmak üzere çeşitli programlama stillerini doğrudan ve kapsamlı bir şekilde destekler.
  • Yanlış seçim yapma fırsatı verse bile programcıya seçim özgürlüğü verin.
  • C ile uyumluluğu mümkün olduğu kadar koruyun, böylece C programlamadan kolay geçişi mümkün kılın.
  • C ve C++ arasındaki tutarsızlıklardan kaçının: Her iki dilde de geçerli olan herhangi bir yapı, her birinde aynı anlama gelmeli ve aynı program davranışına yol açmalıdır.
  • Platforma bağlı veya evrensel olmayan özelliklerden kaçının.
  • “Kullanmadığınız şey için ödeme yapmayın”; hiçbir dil özelliği, onu kullanmayan programların performansının düşmesine neden olmamalıdır.
  • Aşırı karmaşık bir programlama ortamı gerektirmez.

Yeni bir programlama dili oluşturmanın temeli olarak C'nin seçilmesi, C dilinin şu gerçeğiyle açıklanmaktadır:

1. çok amaçlı, kısa ve nispeten düşük seviyeli bir dildir;
2. çoğu sistem sorununu çözmek için uygundur;
3. Her yerde ve her şeyde gerçekleştirilir;
4. UNIX programlama ortamıyla arayüzler.

— B. Stroustrup. C++ programlama dili. Bölüm 1.6

C dilinin bilinen bazı eksikliklerine rağmen Stroustrup bunu temel olarak kullanmaya karar verdi çünkü "C'nin sorunları var, ancak sıfırdan geliştirilen bir dilin de sorunları olacaktır ve biz C'nin sorunlarını biliyoruz." Ek olarak, bu, yalnızca eklenen sözdizimsel öğeleri orijinal C diline çeviren bir derleyici prototipinin (cfront) hızlı bir şekilde elde edilmesini mümkün kıldı.

C++ geliştikçe, C yapılarının yeteneklerini kapsayan başka özellikler de dahil edildi ve bu nedenle, eski yapıları kaldırarak dil uyumluluğunun terk edilmesi sorunu tekrar tekrar gündeme geldi. Ancak aşağıdaki nedenlerden dolayı uyumluluk korunmuştur:

  • orijinal olarak C dilinde yazılmış ve doğrudan C++'a aktarılmış mevcut kodun korunması;
  • daha önce C eğitimi almış programcıların yeniden eğitilme ihtiyacını ortadan kaldırır (yalnızca yeni C++ araçlarını öğrenmeleri gerekir);
  • birlikte kullanıldığında diller arasındaki karışıklığın ortadan kaldırılması (“iki dil birlikte kullanılıyorsa, farklılıkları ya çok az olmalı ya da dilleri karıştırmak imkansız olacak kadar büyük olmalıdır”).

1983'e gelindiğinde dile, sanal işlevler, işlev ve operatör aşırı yüklemesi, referanslar, sabitler, boş bellek yönetimi üzerinde kullanıcı denetimi, gelişmiş tür denetimi ve yeni bir yorum stili (//) gibi yeni özellikler eklendi. Ortaya çıkan dil artık yalnızca klasik C'nin artırılmış bir versiyonu değildi ve sınıflarla birlikte C'den "C++" olarak yeniden adlandırıldı. İlk ticari gösterimi Ekim 1985'te gerçekleşti.

Ortaya çıkan dil adı, C++ tekli sonek artış operatöründen gelir (bir değişkenin değerini birer birer artırır).

Resmi standardizasyon başlamadan önce dil, programlama topluluğundan gelen taleplere yanıt olarak esas olarak Stroustrup tarafından geliştirildi. Dilin standart açıklamalarının işlevi, Stroustrup tarafından C++ üzerinde yazılan basılı çalışmalarla (dil açıklaması, referans kılavuzu vb.) gerçekleştirildi.

Standartların tarihi

1985 yılında, resmi bir standardın bulunmaması nedeniyle son derece önemli olan dilin ilk tanımını sağlayan C++ Programlama Dili'nin ilk baskısı yayınlandı.


1989'da C++ sürüm 2.0 yayımlandı. Yeni özellikleri arasında çoklu kalıtım, soyut sınıflar, statik üye işlevleri, sabit işlevler ve korumalı üyeler yer alıyordu. 1990 yılında, daha sonra standardın temeli haline gelen “C++ Açıklamalı Referans Kılavuzu” yayınlandı. En son güncellemelerşablonlar, istisnalar, ad alanları, yeni döküm türleri ve Boolean türü dahil.

C++ Standart Kütüphanesi de onunla birlikte gelişti. C++ standart kitaplığına yapılan ilk ekleme, geleneksel C printf ve scanf işlevlerinin yerini alacak bir araç sağlayan G/Ç akışlarıydı. Daha sonra en önemli gelişme standart kütüphane Standart Şablon Kütüphanesinin dahil edilmesiydi.

1998 yılında, C++ Standartları Komitesi (ISO/IEC JTC1/SC22/WG21 çalışma grubu) tarafından geliştirilen ISO/IEC 14882:1998 (C++98 olarak bilinir) dil standardı yayımlandı. C++ standardı, nesnelerin nasıl adlandırıldığını, bazı istisna işleme ayrıntılarını ve uygulamayla ilgili diğer ayrıntılı özellikleri tanımlamaz; bu da farklı derleyiciler tarafından üretilen nesne kodunu uyumsuz hale getirir. Ancak bunu başarmak için üçüncü taraflarca belirli mimarilere yönelik birçok standart oluşturulmuştur ve işletim sistemleri.

2005 yılında Kütüphane Teknik Raporu 1 (TR1 olarak kısaltılmıştır) yayımlanmıştır. Resmi olarak standardın bir parçası olmasa da rapor, yazarların C++ dilinin bir sonraki sürümüne dahil edilmesini beklediği standart kitaplık uzantılarını açıklamaktadır. TR1 desteği neredeyse desteklenen tüm C++ derleyicilerinde gelişiyor.

2009 yılından bu yana önceki standardın güncellenmesi için çalışmalar yürütülmekte olup, yeni standardın ön versiyonu önce C++09, bir yıl sonra ise C++0x, bugün ise C++11 olmuştur. TR1'in çoğunu içeren standart kütüphanenin dili ve genişletilmesi.

C++ günümüzün taleplerini karşılamak için gelişmeye devam ediyor. C++ dilini geliştiren ve iyileştirilmesi için C++ standardizasyon komitesine teklifler sunan gruplardan biri Boost'tur ve diğer şeylerin yanı sıra, dilin yeteneklerini metaprogramlama özellikleri ekleyerek geliştirmekle de uğraşmaktadır.

Kimse C++ dilinin haklarına sahip değildir; ücretsizdir. Ancak dil standardı belgesinin kendisi (taslaklar hariç) ücretsiz olarak mevcut değildir.

C++ (c-plus-plus olarak telaffuz edilir) derlenmiş, statik olarak yazılan bir programlama dilidir genel amaçlı, üzerinde herhangi bir karmaşıklık düzeyinde programlar oluşturabilirsiniz.
20 yıldan fazla bir süredir bu dil en popüler ve en çok talep gören üç programlama dili arasında yer almaktadır. (Bunu TIOBE web sitesini ziyaret ederek doğrulayabilirsiniz).
Dil, 1980'lerin başında Bell Labs çalışanı Björn Stroustrup'un kendi ihtiyaçları için C dilinde bir dizi iyileştirme ortaya koymasıyla ortaya çıktı.

Bjarne Stroustrup – C++ dilinin yaratıcısı

Stroustrup, C dilini Simula dilinde bulunan yeteneklerle genişletmeye karar verdi. Bell bilgisayarların üzerinde çalıştığı UNIX sisteminin temel dili olan C, hızlı, zengin özelliklere sahip ve taşınabilirdir. Stroustrup, sınıflar ve nesnelerle çalışma yeteneğini ekledi. Sonuç olarak, pratik modelleme problemlerinin hem geliştirme süresi (Simula benzeri sınıfların kullanımı sayesinde) hem de hesaplama süresi (C hızı sayesinde) açısından çözülmesinin mümkün olduğu ortaya çıktı.
Dil geliştiricisinin kendisi bu konuda şöyle konuşuyor:



1998 yılında bir standartlar komitesi tarafından C++98 olarak bilinen ilk dil standardı yayımlandı. C++ günümüzün taleplerini karşılamak için gelişmeye devam ediyor. C++ dilini geliştiren ve iyileştirilmesi için C++ Standartlar Komitesine teklif sunan gruplardan biri: Artırmak, diğer şeylerin yanı sıra, metaprogramlama özellikleri ekleyerek dilin yeteneklerini geliştirmekle meşgul. En son standart 2017 yılında yayımlandı ve şu şekilde adlandırıldı: C++17. Bir sonraki standardın gelmesi uzun sürmeyecek ve 2020'de ortaya çıkması bekleniyor.
Kimse C++ dilinin haklarına sahip değildir; ücretsizdir. Mart 2016'da Rusya kuruldu çalışma Grubu RG21 C++. Grup, C++ standardına yönelik teklifleri toplamak, bunları bir komiteye göndermek ve bunları Uluslararası Standardizasyon Örgütü'nün genel toplantılarında savunmak üzere organize edildi.
C++ çok paradigmalı bir dildir (paradigma - yazma stili kelimesinden gelir) bilgisayar programları), çok çeşitli farklı programlama stilleri ve teknolojileri dahil. Genellikle nesne yönelimli bir dil olarak sınıflandırılır, ancak kesin olarak konuşursak durum böyle değildir. Çalışma süreci sırasında geliştirici, belirli bir yaklaşım kullanılarak çözülen problemin mümkün olduğu kadar verimli bir şekilde çözülmesi için araç seçiminde mutlak özgürlüğe sahip olur. Başka bir deyişle, C++ programcıyı yalnızca tek bir program geliştirme stiline (örneğin, nesne yönelimli) uymaya zorlamaz.
C++, ortak kapsayıcılar ve algoritmalar, G/Ç, düzenli ifadeler, çoklu iş parçacığı desteği ve diğer özellikleri içeren zengin bir standart kitaplığa sahiptir. C++, Java, C#, D dahil olmak üzere birçok programlama dilini etkilemiştir. C++, C dilinin sözdizimini temel alan bir dil ailesine ait olduğundan, bu ailenin diğer programlama dillerinde kolayca uzmanlaşabilirsiniz: JavaScript, PHP , Perl, Objective-C ve diğerleri. vb., ana dilin kendisi dahil - C. ()
Varlığı boyunca, C++ dili kolayca çürütülebilecek kalıcı mitler edinmiştir (buraya bakın: Bölüm 1 ve Bölüm 2)

Dilin tarihi ve standartlar sürümü

1983

Dilin yaratıcısı Björn Stroustrup'tur. Bir Bell Laboratuvarı çalışanı olan C++ dilinin (“Sınıflı C”) ilk versiyonunu tanıttı.

1985

C++'ın ilk ticari sürümü, dil modern adını alıyor

1986

Björn Stroustrup tarafından yazılan, C++'a adanmış bir kitap olan C++ Programlama Dili'nin ilk baskısı yayınlandı

1998

C++ dilinin uluslararası standardı onaylandı: ISO/IEC 14882:1998 “C++ Programlama Dili Standardı”

2003
2005

Kütüphane Teknik Raporu 1 (TR1) yayımlandı. Resmi olarak standardın bir parçası olmasa da rapor, C++ dilinin bir sonraki sürümüne dahil edilmesi gereken standart kitaplık uzantılarını açıkladı.

2011

Yeni bir standardın yayımlanması – C++11 veya ISO/IEC 14882:2011; yeni standart, TR1'in çoğu dahil olmak üzere dil çekirdeğine eklemeler ve standart kütüphanenin genişletilmesini içeriyordu.

2014

C++14 standardının yayınlanması (“Uluslararası Standart ISO/IEC 14882:2014(E) Programlama Dili C++”); C++14, çoğunlukla hata düzeltmeleri ve küçük iyileştirmeler içeren, C++11'in küçük bir uzantısı olarak görülebilir.

2017

Yeni bir standardın piyasaya sürülmesi – C++1z (C++17). Bu standart birçok değişiklik ve eklemeler getirmiştir. Örneğin STD, C11 standardının kütüphanelerini içeriyordu, dosya sistemi deneysel TS I kütüphanesinin büyük bir kısmı olan boost::filesystem'i temel alır.

2020

C++20, C++ programlama dili için ISO/IEC standardının resmi olmayan adıdır ve C++17'yi takip etmesi beklenmektedir. Taslak N4800 standardı.

C++ Felsefesi

Björn Stroustrup, The Design and Evolution of C++ (2007) adlı kitabında C++'ı (kısaltılmış haliyle) tasarlarken takip ettiği ilkeleri şöyle anlatıyor:

  • Statik veri türlerine, C dilinin verimliliğine ve taşınabilirliğine sahip genel amaçlı bir dil elde edin.
  • Çeşitli programlama stillerini doğrudan ve kapsamlı bir şekilde destekler.
  • Yanlış seçim yapma fırsatı verse bile programcıya seçim özgürlüğü verin.
  • C ile uyumluluğu mümkün olduğu kadar koruyun, böylece C programlamadan kolay geçişi mümkün kılın.
  • C ve C++ arasındaki tutarsızlıklardan kaçının: Her iki dilde de geçerli olan herhangi bir yapı, her birinde aynı anlama gelmeli ve aynı program davranışına yol açmalıdır.
  • Platforma bağlı veya evrensel olmayan özelliklerden kaçının.
  • “Kullanmadığınız şey için ödeme yapmayın” - hiçbir dil özelliği, onu kullanmayan programların performansında düşüşe yol açmamalıdır.
  • Aşırı karmaşık bir programlama ortamı gerektirmez.

C ve C++

C++'ın sözdizimi C dilinden miras alınmıştır. Her ne kadar resmi olarak C++'ın ilkelerinden biri C diliyle uyumluluğu sürdürmeye devam etse de, aslında bu diller için standardizasyon grupları etkileşimde bulunmaz ve yaptıkları değişiklikler değişmez. sadece birbiriyle ilişkili değildir, ancak çoğu zaman ideolojik olarak birbirleriyle temelde çelişir. Dolayısıyla yeni C standartlarının çekirdeğe eklediği öğeler, standart kütüphanenin C++ standart öğelerinde yer alır ve çekirdekte hiç yer almaz; örneğin dinamik diziler, sabit sınırları olan diziler, paralel işlem olanakları. Stroustrup'a göre bu iki dilin gelişimini birleştirmek büyük fayda sağlayacak ancak siyasi nedenlerden dolayı bunun mümkün olması pek mümkün değil. Dolayısıyla C ve C++ arasındaki pratik uyumluluk yavaş yavaş kaybolacak.
Bu örnekte, kullanılan derleyiciye bağlı olarak “C++” veya “C” çıktısı alınacaktır:

Program 9.1

#katmak int main() ( printf("%s\n", (sizeof("a") == sizeof(char)) ? "C++" : "C"); return 0; )

Bunun nedeni, C'deki karakter sabitlerinin int türünde, C++'da ise char türünde olması, ancak bu türlerin boyutlarının farklı olmasıdır.

Uygulama Yaşam Döngüsü Modelleri

Yaşam döngüsü yazılım oluşturma ihtiyacına karar verildiği andan itibaren başlayan bir süredir yazılım ürünü ve hizmetten tamamen çekildiği anda sona erer. Bu döngü yazılım oluşturma ve geliştirme sürecidir. Birkaç yaşam döngüsü modeli vardır.
Kademeli model yaşam döngüsü (İngiliz şelale modeli) 1970 yılında Winston Royce tarafından önerildi. Projenin tüm aşamalarının kesin olarak sabit bir sırayla sıralı olarak uygulanmasını sağlar. Bir sonraki aşamaya geçiş, bir önceki aşamadaki işin tamamen tamamlanması anlamına gelir. Gereksinimlerin oluşturulması aşamasında tanımlanan gereksinimler kesinlikle formda belgelenir. başvuru şartları ve projenin tüm gelişimi boyunca kaydedilir. Her aşama, geliştirmenin başka bir geliştirme ekibi tarafından sürdürülmesine izin vermeye yetecek eksiksiz bir belge setinin yayınlanmasıyla sonuçlanır.
Şelale modeline göre proje aşamaları:

  1. Gereksinimlerin oluşumu;
  2. Tasarım;
  3. Uygulama;
  4. Test yapmak;
  5. Uygulama;
  6. Operasyon ve bakım.

Kademeli modelde bir proje aşamasından diğerine geçiş, önceki aşamanın sonucunun tamamen doğru olduğunu varsayar. Büyük projelerde bunu başarmak neredeyse imkansızdır. Bu nedenle bu model yalnızca küçük bir proje geliştirmek için uygundur. (W. Royce'un kendisi bu modele bağlı kalmadı ve yinelenen bir model kullandı).
Yinelemeli model
Kademeli modele bir alternatif, 70'lerde T. Gilb'den alınan yinelemeli ve artımlı geliştirme (IID) modelidir. evrimsel modelin adı. IID modeli, proje yaşam döngüsünü, bir bütün olarak projeyle karşılaştırıldığında daha küçük işlevsellik parçalarının oluşturulmasına uygulanan tüm geliştirme süreçlerini içeren, her biri bir "mini projeye" benzeyen bir yineleme dizisine bölmeyi içerir. Her yinelemenin amacı, tüm önceki ve mevcut yinelemelerin entegre içeriği tarafından tanımlanan işlevsellik de dahil olmak üzere, yazılım sisteminin çalışan bir sürümünü elde etmektir. Son yinelemenin sonucu, ürünün gerekli tüm işlevlerini içerir. Böylece, her yinelemenin tamamlanmasıyla birlikte ürün, yeteneklerinde bir artış - bir artış - alır ve bu nedenle, evrimsel olarak gelişir.


Yinelemeli yaklaşımın çeşitli varyantları çoğu modern geliştirme metodolojisinde uygulanmaktadır:

Geliştirme Süreci - Rasyonel Birleşik Süreç (RUP)

Rasyonel Birleşik Süreç (RUP)(rasyonel birleşik süreç), Rational Software (IBM) tarafından sağlanan bir yazılım geliştirme metodolojisidir. Metodoloji, geliştirmenin tüm aşamaları için öneriler sağlar: iş modellemeden bitmiş programın test edilmesine ve devreye alınmasına kadar. Birleşik Modelleme Dili (UML) modelleme dili olarak kullanılır.
Ürün geliştirme yaşam döngüsünün tamamı, her biri bir veya daha fazla yineleme içeren dört aşamadan oluşur.

  • Başlangıç ​​aşaması (Başlangıç)
  • Proje kapsamının ve gerekli kaynak miktarının belirlenmesi. Ürünün temel gereksinimleri, sınırlamaları ve temel işlevleri belirlenir. Riskler değerlendirilir. Eylem planlaması. Başlangıç ​​aşamasının sonunda, paydaşlar arasında projeye devam etmek için bir anlaşma yapılmasını gerektiren Yaşam Döngüsü Hedefi Kilometre Taşına ulaşılıp ulaşılmadığı değerlendirilir.

  • Açıklama
  • Gereksinimlerin belgelenmesi. Yürütülebilir mimarinin tasarımı, uygulanması ve test edilmesi. Şartların ve maliyetlerin açıklanması. Temel risklerin azaltılması. Geliştirme aşamasının başarıyla tamamlanması, Yaşam Döngüsü Mimarisi Dönüm Noktasına ulaşmak anlamına gelir.

  • Yapı
  • "Oluşturma" aşamasında ürünün işlevlerinin çoğu uygulanır: uygulama tasarımı tamamlanır, kaynak kodu yazılır. Oluşturma aşaması, sistemin ilk harici sürümü ve İlk Operasyonel Yetenek kilometre taşıyla sona erer.

  • giriiş
  • “Uygulama” aşamasında, Son sürümürün geliştiriciden müşteriye aktarılır. Buna bir beta test programı, kullanıcı eğitimi ve ürünün kalitesinin belirlenmesi dahildir. Kalite, kullanıcı beklentilerini veya Başlangıç ​​aşamasında belirlenen kriterleri karşılamıyorsa Uygulama aşaması tekrar tekrarlanır. Tüm hedefleri tamamlamak, Ürün Sürümü kilometre taşına ulaşmak ve geliştirme döngüsünün tamamını tamamlamak anlamına gelir.



« Bilgi Teknolojisi. Sistem ve yazılım mühendisliği. Yaşam Döngüsü Süreçleri yazılım". Bu standart, Rusya Federasyonu Federal Teknik Düzenleme ve Metroloji Ajansı tarafından benimsenmiştir ve uluslararası ISO/IEC 12207:2008 standardına benzer. Bu standart, yazılım sektörüne yön vermek amacıyla kullanılabilecek yazılım yaşam döngüsü süreçlerine yönelik genel bir çerçeve oluşturur. Standart belirli bir yaşam döngüsü modeli önermemektedir. Hükümleri, yazılım oluşturmaya yönelik tüm yaşam döngüsü modelleri, yöntemleri ve teknolojileri için ortaktır. Yaşam döngüsü süreçlerinin yapısını, bu süreçlerde yer alan faaliyetlerin ve görevlerin nasıl uygulanacağını veya tamamlanacağını belirtmeden açıklar.

Ders için sunum
Mesaj konuları
  • Özgür Yazılım Vakfı (FSF)
  • Özgür yazılım lisansları
  • Ücretsiz Yazılım ve Açık Kaynak
  • Programlama dillerinin gelişim tarihi
  • C dilinin tarihi C ve C++
  • Hikaye
  • C++'a yönelik eleştiri
  • UNIX'in Tarihi
  • Spiral yazılım yaşam döngüsü modeli
  • UML (Birleşik Modelleme Dili)
  • Microsoft Çözüm Çerçevesi
  • Windows'ta C/C++ programlama için IDE
  • C/C++ derleyicileri
  • Windows'ta Konsol Uygulaması Oluşturma
Sorular
  1. Neden kademeli modeli yazılım geliştirme büyük projelerde kullanılmıyor mu?
  2. Şelale ve yinelemeli geliştirme modelleri arasındaki fark nedir?
  3. Rational Unified Process (RUP) metodolojisinde yazılım geliştirmenin aşamalarını listeleyin

Etiketler: C, ANSI C, ISO C, C99, C11, ISO/IEC C, C standardizasyonunun tarihçesi.

Kökenler

C ve Bell Laboratuvarlarında Ken Thompson, Denis Ritchie ve ortakları tarafından geliştirilen UNIX işletim sisteminin oluşturulmasından türetilen bir "yan ürün" dür. Thompson tek başına, yalnızca 8K kelimelik ana belleğe sahip ilk mini bilgisayarlardan biri olan DEC PDP-7 üzerinde çalışan UNIX'in orijinal versiyonunu yazdı (sonuçta yıl 1969'du).

Zamanın diğer işletim sistemleri gibi UNIX de montaj dilinde yazılmıştır. Assembly dili programlarında hata ayıklamak gerçekten zahmetlidir ve iyileştirilmesi zordur ve UNIX de bir istisna değildi. Thompson, işletim sisteminin daha da geliştirilmesi için üst düzey bir dile ihtiyaç duyulduğuna karar verdi ve küçük bir dil ortaya çıkardı. B. Thompson, 60'ların ortasında geliştirilen bir sistem programlama dili olan BCPL dilini temel aldı. BCPL ise en eski (ve en etkili) dillerden biri olan ALGOL 60'tan kaynaklanmaktadır.

Ritchie kısa süre sonra UNIX projesine katıldı ve B dilinde yazmaya başladı. 1970 yılında Bell Labs proje için bir PDP-11 satın aldı. B, PDP-11'de çalışmaya hazır olduğundan Thompson UNIX'in bir kısmını B'ye yeniden yazdı. 1971'de B'nin PDP-11 için pek uygun olmadığı ortaya çıktı ve Ritchie, B'nin genişletilmiş bir versiyonunu oluşturmaya başladı. buna NB (Yeni B) adını verdi, ancak dil B'den çok farklı hale gelince isim C olarak değiştirildi. 1973'e gelindiğinde dil, UNIX'in yeniden yazılmasına yetecek kadar kararlı hale geldi. C'ye geçiş önemli bir avantaj sağladı: taşınabilirlik. Geliştirme ekibi, Bell Laboratuvarlarındaki makinelerin her biri için bir C derleyicisi yazarak onlara UNIX'i aktarabildi.

Standardizasyon

C, 70'lerde, özellikle de C üzerine ilk kitabın yayınlandığı 1977 ile 1979 arasında gelişmeye devam etti. Brian Kernighan ve Denis Ritchie tarafından yazılan ve 1978'de yayınlanan C Programlama Dili, C programcılarının kutsal kitabı haline geldi. Resmi bir standardın yokluğunda, K&R veya C hayranlarının sevdiği isimle "Beyaz Kitap" olarak da bilinen bu kitap, fiili standart haline geldi. 70'lerde çok az C programcısı vardı ve bunların çoğu UNIX kullanıcısıydı. Ancak 80'lerde C bunun ötesine geçti dar çerçeveler UNIX dünyası. C derleyicileri, farklı işletim sistemlerini çalıştıran çeşitli makinelerde kullanılabilir hale geldi. Özellikle C hızla gelişen IBM PC platformunda yayılmaya başladı.

Popülerliğin artmasıyla birlikte sorunlar da ortaya çıktı. Yeni derleyiciler yazan programcılar K&R'da anlatılan dili temel aldılar. Ne yazık ki, K&R'da dilin bazı özellikleri belirsiz bir şekilde tanımlanmıştı, bu nedenle derleyiciler bunları genellikle kendi takdirlerine göre yorumladılar. Ayrıca kitapta neyin dilin bir özelliği olduğu ile neyin UNIX işletim sisteminin bir özelliği olduğu arasında net bir ayrım yapılmadı. Durumu daha da kötüleştiren şey, K&R'nin yayınlanmasından sonra C'nin gelişmeye devam etmesiydi: ona yeni özellikler eklendi ve eskileri çıkarıldı. Çok geçmeden dilin kapsamlı, doğru ve modern bir tanımına açık bir ihtiyaç ortaya çıktı. Böyle bir standart olmadan, dilin en büyük gücü olan taşınabilirliği engelleyen dilin lehçeleri ortaya çıkmaya başladı.

Amerikan C standardının geliştirilmesi, 1983 yılında Amerikan Ulusal Standartlar Enstitüsü'nün (ANSI) himayesinde başladı. Birçok revizyondan sonra standart 1988'de son halini aldı ve Aralık 1989'da ANSI X3.159-1989 olarak resmi olarak kabul edildi. 1990 yılında Uluslararası Standardizasyon Örgütü (ISO) tarafından uluslararası standart ISO/IEC 9899:1990 olarak onaylandı. Dilin bu sürümüne, genellikle K&R C olarak adlandırılan C'nin orijinal sürümüyle karışıklığı önlemek için genellikle C89 veya C90 adı verilir.

Dil 1995 yılında küçük değişikliklere uğradı (değişiklikler genellikle Değişiklik 1 olarak adlandırılan bir belgede açıklanmaktadır). 1999 yılında ISO/IEC 9899:1999 standardı yayınlandığında daha önemli değişiklikler meydana geldi. Bu standartta açıklanan dile genellikle C99 adı verilir. Bir zamanlar C99'u tanımlamak için kullanılan "ANSI C", "ANSI/ISO C" ve "ISO C" terimleri, iki standardın varlığı nedeniyle iki anlama sahiptir.

2011 yılında C++ dilinin revizyonuyla birlikte C11 standardı yayımlandı. '11 standardının varlığına rağmen birçok derleyici hala C99 versiyonlarını bile tam olarak desteklememektedir, dolayısıyla C11 standardının kullanımı açıkça belirtilecektir.

C dili ve UNIX

Programlama dili İLE("C" okuyun) 70'lerin başında Bell Laboratuvarlarından Ken Thompson ve Dennis Ritchie'nin UNDC işletim sistemini geliştirmesiyle oluşturuldu. İlk önce derleyici kısmını oluşturdular İLE, daha sonra derleyicinin geri kalanını derlemek için kullandım İLE ve son olarak ortaya çıkan derleyiciyi UNIX'i derlemek için kullandık. UNIX işletim sistemi orijinal olarak kaynak koduyla dağıtıldı. İLEüniversiteler ve laboratuvarlar arasında ve alıcı kaynak kodunu kendi dilinde derleyebilir İLE uygun bir derleyici kullanarak makine koduna İLE.

Kaynak kodunun dağıtımı UNIX işletim sistemini benzersiz kıldı; programcı işletim sistemini değiştirebilir ve kaynak kodu bir donanım platformundan diğerine aktarılabilir. Günümüzde POSIX standardı, mevcut UNIX sistem çağrılarının standart kümesini tanımlamaktadır. İLE POSIX uyumlu UNIX sürümlerinde uygulanması gereken. C, Thomson ve Ritchie'nin UNIX'in yaratılması sırasında geliştirdiği üçüncü dildi; ilk ikisi elbette A Ve İÇİNDE.

C mobil montaj dili

Önceki dille karşılaştırıldığında - BCPL, dil İLE Belirli uzunluktaki veri türleri eklenerek geliştirildi. Örneğin, int veri türü belirli sayıda bit (genellikle 16) içeren bir değişken oluşturmak için kullanılabilirken, long veri türü, belirli bir bit sayısına sahip bir değişkenin tamamını oluşturmak için kullanılabilir. Büyük bir sayı bitler (genellikle 32). Diğer yüksek seviyeli dillerden farklı olarak İLE işaretçileri ve referansları kullanarak doğrudan bellek adresleriyle çalışabilir. Çünkü İLE Donanıma doğrudan erişme yeteneğini koruduğu için genellikle orta düzey bir dil olarak sınıflandırılır veya şaka amaçlı olarak "mobil montaj dili" olarak adlandırılır.

C - yapılandırılmış programlama dili

Dilbilgisi ve sözdizimine gelince, o zaman İLE yapılandırılmış bir programlama dilidir. Birçok modern programcı sınıflar ve nesneler açısından düşünürken, programcılar İLE prosedürler ve işlevler açısından düşünün. İÇİNDE İLE struct anahtar sözcüğünü kullanarak kendi soyut veri türlerinizi tanımlayabilirsiniz. Benzer şekilde, kendi tam sayı türlerinizi (numaralandırmalar) tanımlayabilir ve başka adlar verebilirsiniz. mevcut türler veri kullanarak anahtar kelime typedef . Bu manada İLE nesne yönelimli programlamanın tohumlarını taşıyan yapılandırılmış bir dildir.

C dilinin standardizasyonu

Yaygın dil C Farklı bilgisayar türlerinde (bazen donanım platformları da denir) ne yazık ki dilin birçok varyasyonuna yol açmıştır. Benzerlerdi ama birbirleriyle uyumsuzlardı. Bu, birden fazla platformda çalışabilen uyumlu programlar yazmaya ihtiyaç duyan yazılım geliştiricileri için büyük bir sorundu. Standart bir versiyona ihtiyaç olduğu ortaya çıktı C. 1983 yılında ANSI (Amerikan Ulusal Standartlar Komitesi), bir dil standardı oluşturmak için X3J11 teknik komitesini kurdu C("dilin net ve makineden bağımsız bir tanımını sağlamak"). 1989 yılında standart onaylandı. ANSI standartlaştırmak için ISO (Uluslararası Standartlar Organizasyonu) ile ortaklık kurdu C uluslararası; 1990 yılında ANSI/ISO 9899:1990 adını taşıyan ortak bir standart yayınlandı. Bu standart halen geliştirilmektedir ve çoğu derleyici geliştirme şirketi tarafından desteklenmektedir.

C++'ın Doğuşu

Bjarne Stroustrup nesne yönelimli potansiyeli açığa çıkarıyor İLE sınıf yeteneklerini aktararak Simülasyon 67 V İLE. Başlangıçta yeni dil "sınıflarla C" adını taşıyordu ve ancak o zaman çağrılmaya başlandı C++. Dil C++ Bell Laboratuarlarında geliştirildikten sonra popülerlik kazandı, daha sonra diğer sektörlere ve şirketlere devredildi. Bugün dünyadaki en popüler (ve yetkili) programlama dillerinden biridir. C++ hem iyi hem de kötü tarafları miras alır İLE.

Bjarna Stroustrup'un Vahiyleri

Bjarne Stroustrup: "Ben şunu buldum C++, ilk tanımını yazdı ve ilk uygulamayı tamamladı. Tasarım kriterlerini seçip formüle ettim C++, ana özelliklerini geliştirdi ve standardizasyon komitesindeki dili genişletme tekliflerinin kaderinden sorumluydu C++", en popüler programlama dilinin yazarı yazıyor. - "Dil C++ dile çok şey borçludur C ve dil C bir alt küme olarak kalır C++ dili(ancak C++, C tipi sistemdeki birçok ciddi kusuru düzeltmiştir). Ayrıca para biriktirdim C, en kritik sistem görevlerini yerine getirmeye yetecek kadar düşük düzeydedir. Dil C, selefi BCPL'ye çok şey borçludur; Bu arada, yorum stili // alınmıştır. C++ BCPL'den. Bir diğer ana ilham kaynağı ise dildi Simula67. Sınıf kavramı (türetilmiş sınıflar ve sanal işlevlerle birlikte) ondan ödünç alınmıştır. Operatörleri aşırı yüklemenin bir yolu ve bir talimatın geri çağırılabileceği her yere duyuru yerleştirme yeteneği Algol68. "

Neden C++

İsim C++ Rick Massitti tarafından icat edildi. İsim, ona geçişin evrimsel doğasını gösterir. C. "++" bir artırma işlemidir C. Biraz daha kısa isim C+ bir sözdizimi hatasıdır; üstelik zaten bambaşka bir dilin adı olarak da kullanılıyor. Anlambilim uzmanları C Bunu bul C++ daha kötü ++C. Başlıklar D dil bunu anlamadı çünkü C'nin bir uzantısıydı ve çeşitli özellikleri bir kenara atarak sorunlarını çözmeye çalışmıyordu.

C++'a neden ihtiyaç duyuldu?

İlk olarak C++ programlama dili yazar ve arkadaşlarının Assembly, C veya diğer modern yüksek seviyeli dillerde programlama yapmasına gerek kalmayacak şekilde tasarlanmıştır. Asıl amacı yazmaktı iyi programlar bireysel programcı için daha basit ve daha eğlenceli. Kalkınma Planı C++ kağıt üzerinde hiçbir zaman var olmadı; tasarım, dokümantasyon ve uygulama aynı anda taşındı. Tabii ki, harici arayüz C++ yazıldı C++. Hiçbir zaman bir "C++ Projesi" veya "C++ Geliştirme Komitesi" olmadı. Bu yüzden C++ kullanıcıların karşılaştığı zorluklarla başa çıkmak ve yazar ile arkadaşları ve meslektaşları arasındaki tartışmalar yoluyla her yönde gelişti ve gelişmeye devam ediyor.

Gerçek nesne yönelimli C++

İÇİNDE C++ dili Nesne yönelimli programlamanın ilkeleri, üzerinde durduğu üç sütun da dahil olmak üzere tamamen desteklenir: kapsülleme, kalıtım ve polimorfizm. Kapsülleme C++ sınıf adı verilen standart dışı (özel) veri türlerinin oluşturulması yoluyla desteklenir. Dil C++ mirası destekler. Bu, mevcut veri tipinin uzantısı olan yeni bir veri tipi (sınıf) tanımlayabileceğiniz anlamına gelir.

Rağmen C++ programlama dili haklı olarak bir devamı olarak adlandırıldı İLE ve dilde uygulanabilir herhangi bir program İLE derleyici tarafından desteklenecektir C++, buradan taşınırken İLEİle C++Çok önemli bir atılım yapıldı. Dil C++ dille olan yakınlığından yararlandı İLE Yıllardır birçok programcının bulduğu gibi, tam olarak yararlanmak için C++ dili, önceki bilgilerinin bir kısmını unutup yenilerini edinmeleri, yani programlama problemlerini kavramsallaştırmanın ve çözmenin yeni bir yolunu öğrenmeleri gerekir. Öğrenmeye başlamadan önce C++, Stroustrup ve diğer programcıların çoğu C++ dil öğrenmeyi düşünün İLE isteğe bağlı.

Programlama dili C++şu anda ticari ürünler geliştirmek için kullanılan baskın dil olarak kabul ediliyor ve oyunların %90'ı bu dilde yazılıyor C++ DirectX'i kullanarak.

Edebiyat

Kaynaklar:

  • H.M.Deitel, P.J.Deitel "C++'da Nasıl Programlanır?"
  • Bjarne Stroustrup "C++ Programlama Dili. 3. Baskı."
  • Simon Robinson, Ollie Cornes, Jay Glynn ve diğerleri "Profesyoneller için C#".
  • Jess Liberty "21 günde kendinize C++ öğretin"
  • Stanislav Gornakov "DirectX, C++ programlama dersleri"

C++, hem yüksek seviyeli hem de düşük seviyeli programlama dillerinin özelliklerini birleştiren genel amaçlı derlenmiş bir programlama dilidir. Önceki C programlama diliyle karşılaştırıldığında, nesne yönelimli ve genel programlamanın desteklenmesine en büyük önem verilmektedir. "C++ programlama dili" adı, tekli operatör ++'nın bir değişkenin artışını ifade ettiği C programlama dilinden gelir.

C++ programlama dili yazılım geliştirmede yaygın olarak kullanılmaktadır. Yani, çeşitli uygulama programlarının oluşturulması, işletim sistemlerinin, aygıt sürücülerinin, video oyunlarının ve çok daha fazlasının geliştirilmesi. 1980'lerin başında Björn Stroustrup tarafından yaratıldı. Kendi ihtiyaçları doğrultusunda C programlama dilinde bir takım iyileştirmeler yaptı. onlar. Başlangıçta C++ programlama dilini yaratmaya yönelik herhangi bir plan yoktu.

Prosedürel programlama, nesne yönelimli programlama, genel programlama gibi programlama paradigmalarını destekler, modülerlik, ayrı derleme, istisna işleme, veri soyutlama, nesne türlerinin (sınıfların) bildirimi, sanal işlevler sağlar.

Ortaya çıkan dil adı, C++ tekli sonek artış operatöründen gelir (bir değişkenin değerini birer birer artırır). C+ ismi, C dilinde bir sözdizimi hatası olduğundan ve ayrıca isim başka bir dil tarafından kullanıldığı için kullanılmadı. Dil ayrıca "C'nin bir uzantısı olduğu ve C'nin öğelerini kaldırarak sorunları çözmeye çalışmadığı" için D olarak adlandırılmadı.

Dilin avantajları:

1. Ölçeklenebilirlik. Programlar çok çeşitli platformlar ve sistemler için C++ dilinde geliştirilmektedir.

2. Bellek, adresler, bağlantı noktaları ile düşük düzeyde çalışabilme yeteneği.

3. Şablonları kullanarak derleme aşamasında farklı veri türleri, uzmanlıkları ve hesaplamaları için genelleştirilmiş algoritmalar oluşturma yeteneği.

4. Çapraz platform. Şunun için mevcut derleyiciler: büyük miktar platformlar, programlar çok çeşitli platformlar ve sistemler için C++ dilinde geliştirilmektedir.

5. Verimlilik. Dil, programcıya program yapısı ve yürütme sırasının tüm yönleri üzerinde maksimum kontrol sağlamak üzere tasarlanmıştır.

Dilin dezavantajları:

1. Tür güvenliği ilkelerini ihlal eden birçok özelliğin varlığı, ince hataların C++ programlarına kolayca sızmasına neden olur.

2. Modülerlik için yetersiz destek. Harici bir modülün arayüzünü, bir başlık dosyasının (#include) ön işlemci eklenmesi yoluyla bağlamak, çok sayıda modülü bağlarken derlemeyi ciddi şekilde yavaşlatır.

3. C++ dilinin öğrenilmesi ve derlenmesi zordur.

4. Bazı tür dönüşümleri sezgisel değildir. Özellikle imzasız ve imzalı bir numara üzerinde yapılan işlem imzasız bir sonuç üretir.

5. Bazı insanlar yerleşik bir çöp toplama sisteminin olmayışını C++ dilinin bir dezavantajı olarak görüyor. Öte yandan, C++ tehlikeli işaretçilerin kullanımını neredeyse ortadan kaldıracak yeterli araca sahiptir; çöp toplamanın uygulanmasında ve kullanımında (dil düzeyinde değil, kütüphane düzeyinde) hiçbir temel sorun yoktur. Yerleşik çöp toplama özelliğinin olmaması, kullanıcının kendi kaynak yönetimi stratejisini seçmesine olanak tanır.