Yapısal programlama ilk tam programlama metodolojisidir. Yapılandırılmış programlama, programlamanın gelişimi üzerinde büyük bir etkiye sahiptir. Bu yöntem, pratik programlamada çok yaygın olarak kullanıldı ve bugüne kadar belirli bir problem sınıfı için önemini kaybetmedi.

Yapılandırılmış yaklaşım iki temel ilkeye dayanmaktadır:

1, prosedürel programlama dillerinin (Algol, Pascal, SI) kullanılmasıdır;

2, problemi çözmek için algoritmanın sıralı bir yukarıdan aşağıya ayrıştırılmasıdır.

Sorun, bir dizi eylem uygulanarak çözülür. Başlangıçta görev, girdi ve çıktı açısından formüle edilir. Bu, programın girişine bazı verilerin sağlandığı anlamına gelir. Program çalışıyor ve bir cevap veriyor.

Bundan sonra, tüm görevin daha basit eylemlere sıralı olarak ayrıştırılması başlar.

Örneğin, adresin doğruluğunu kontrol etmek için bir program yazmamız gerekirse, önce şu şekilde yazıyoruz:

Adresi mevcut adreslerin veritabanına göre kontrol edin

Test pozitifse,evet,

aksi takdirde, No.

Açıkçası, böyle bire bir gösterim, bir programda yüksek seviyeli bir dilde, örneğin Pascal'da görüntülenir.

program kontrol_adresi (giriş, çıkış); varan_address: Adres; okuma_adresine başlayın (bir _adres);

eğer (check_database (an_address)) then

writelnTMIa "); başka

Bu program prosedürü kullanır okumak_ adres adresi ve prosedürü okumak için kontrol_ veri tabanı veri tabanındaki bilgilerle okuma adresini kontrol etmek için. Şimdi bir sonraki seviye prosedürler için bir program derleme sürecine devam edebiliriz: adresi okumak ve veritabanını kontrol etmek.

Programın herhangi bir aşamada kontrol edilebilmesi çok önemlidir. Bunu yapmak için, alt düzey prosedürlerin giriş ve çıkışlarını simüle eden prosedürler olan stub'lar yazmanız gerekir. (Yukarıdaki programda, terminalden giriş yerine bazı sabit adreslerin yerini alan adres okuma prosedürünü ve hiçbir şey yapmayan, ancak her zaman doğru döndüren veritabanı kontrol prosedürünü kullanabilirsiniz.)

Program taslaklarla bağlantı kurar ve çalışabilir. Stub'lar, bir sonraki seviyeyi uygulamadan önce en üst düzey mantığınızı test etmenize olanak tanır.

Yapısal programlama açıkça tanımlanmıştır modüler programlamanın önemibüyük projeler geliştirirken, ancak programlama dilleri modülerliği hala zayıf bir şekilde desteklemektedir. Programları yapılandırmanın tek yolu, onları alt yordamlardan veya işlevlerden oluşturmaktı. Fiili argümanların sayısının ve türlerinin beklenen biçimsel parametrelere uygunluğu dahil olmak üzere işlev çağrılarının doğruluğu üzerindeki kontrol, yalnızca yürütme aşamasında gerçekleştirildi (bir işlev prototipi kavramı daha sonra ortaya çıktı).

1.4. Nesne yönelimli programlamanın temelleri ve tarihçesi

Nesne yönelimli programlama, üç ana programlama probleminin gerçekleşmesiyle ortaya çıktı ve yaygınlaştı.

1 - Dillerin ve programlama yöntemlerinin geliştirilmesi, programlara yönelik artan ihtiyaçlara ayak uydurmadı. Bu ihtiyaçları karşılamanın tek gerçek yolu, önceden geliştirilmiş, test edilmiş ve hata ayıklanmış yazılımları yeniden kullanmaktı.

2 - geliştirilen sistemlerin bakımını ve değiştirilmesini basitleştirme ihtiyacı. (Sistem gereksinimlerinde sürekli değişiklik olması gerçeği, geliştiricilerin çalışmalarının yetersizliği veya yeterince açık olmayan bir organizasyonu olarak değil, sistemin geliştirilmesi için normal bir koşul olarak kabul edildi.) Yazılım sistemleri oluşturma şeklini, yerel değişikliklerin tüm sistemin performansını bozmaması ve sistemin davranışında değişiklik yapmak daha kolay olacak şekilde değiştirmek gerekiyordu. ...

3, sistem tasarımını kolaylaştırmaktır. Yapısal programlamanın gerektirdiği gibi, tüm problemler algoritmik tanımlamaya ve dahası algoritmik ayrıştırmaya uygun değildir. Program yapısının çözülmesi gereken görevlerin yapısına yaklaştırılması ve sözde anlamsal molaçözülen problemin yapısı ile programın yapısı arasında. Problemin dilinin altında yatan kavramlar ve onu çözmenin yolları farklı olduğunda anlamsal bir boşluk oluşur. Bu nedenle, çözümün kendisini kaydetme ihtiyacının yanı sıra, bazı kavramları diğerlerine çevirmek de gereklidir. (Bunu bir doğal dilden diğerine çeviriyle karşılaştırın. Kesin olarak, çünkü daha önce Rus dilinde böyle kavramlar yoktu. komisyoncu, açık denizveya yatırımcı.Ne yazık ki, programlamada kelimeleri ödünç almak mümkün değildir.)

Dolayısıyla, tasarımı basitleştirmek, hazır modüllerin yeniden kullanılabilirliği yoluyla geliştirmeyi hızlandırmak ve modifikasyon kolaylığı - bunlar, destekçileri tarafından desteklenen nesne yönelimli programlamanın üç ana avantajıdır.

Nesneye yönelik programlama, bir sistemin tasarımına, inşasına ve geliştirilmesine yönelik birleşik bir yaklaşım varsayar.

Nesneye yönelik yöntemin ortaya çıkışı, yazılım geliştirme yöntemlerinin önceki tüm geliştirmelerinin yanı sıra diğer birçok bilim dalının temelinde gerçekleşti.

Aşağıdaki teknolojik gelişmeler, sistem tasarımına yönelik nesne yönelimli bir yaklaşımın ortaya çıkmasına katkıda bulunmuştur:

1 - Bilgisayar teknolojisinin geliştirilmesi, özellikle işletim sistemlerinin temel kavramları için donanım desteği ve işlev odaklı sistemlerin yapımı.

2 - Programlama metodolojisindeki gelişmeler, özellikle modüler sistem yapımı ve bilgi kapsülleme.

3 - Veritabanı yönetim sistemlerinin inşası ve modellenmesi teorisi, nesneler arasında ilişkiler kurma fikrini nesne programlamaya getirdi.

4 - Yapay zeka üzerine yapılan araştırmalar, soyutlama mekanizmalarının daha iyi anlaşılmasını mümkün kılmıştır. Minsky tarafından desen tanıma sistemlerinde gerçek nesneleri temsil etmek için önerilen çerçeve teorisi, yalnızca yapay zeka sistemlerine değil, aynı zamanda programlama dillerinde soyutlama mekanizmalarına da güçlü bir ivme kazandırdı.

5 - Felsefe ve bilgi teorisinin gelişimi. Pek çok yönden, nesneye yönelik sistem yapımı, simüle edilmiş gerçek dünyanın belirli bir görünümüdür. Bu açıdan, felsefe ve bilgi teorisinin nesne modeli üzerinde güçlü bir etkisi olmuştur. Antik Yunanlılar bile dünyayı nesneler veya süreçler olarak görüyorlardı. Descartes, çevreleyen dünyanın nesneye yönelik bir değerlendirmesinin bir kişi için doğal göründüğü varsayımını ileri sürmüştür. Minsky, aklın kendisini ayrı ayrı düşünemeyen ajanların etkileşimi olarak gösterdiğini öne sürdü.

Programlamaya nesneye yönelik yaklaşım, Smalltalk, C ++, Java vb. Programlama dilleri tarafından desteklenmektedir. Diller, nesne yönelimli programlama için ana araçlardır; nesneye yönelik yöntemin temelini oluşturan fikirlerin çoğu, geliştirilmeleri sırasında ortaya çıktı.

Bir nesne modeli oluşturmanın ilk adımı, soyut veri türlerinin ortaya çıkışı olarak düşünülmelidir. Soyut veri türlerinin programlama dillerinde ilk tam uygulamasının Simula dili olduğuna inanılmaktadır.

Ardından, mevcut programlama durumunu tanımlayan diğer nesne yönelimli diller geldi (ve ortaya çıkmaya devam ediyor). En yaygın olanları C ++, CLOS, Eiffel, Java'dır.

yazılım

Programlamaya yapısal yaklaşım, program oluşturmak için hem bir metodoloji hem de bir teknolojidir. Bir zamanlar, uygulaması program yazarken ve hata ayıklarken programcıların üretkenliğinde bir artış sağladı; modüllerden oluşan ve bakıma uygun programlar elde etmek; geliştiricilerden oluşan bir ekip tarafından programların oluşturulması; belirli bir zamanda programın oluşturulmasının sonu.

Yapısal programlama, kontrolün sıralı, koşullu ve yinelemeli aktarımlarına izin veren bir programda kontrolü aktarmak için yapıları kullanan bir yaklaşımdır. Goto ifadesiyle koşulsuz kontrol devri yasaktır. Sonuç olarak, programdaki sıralı, koşullu ve döngüsel ifadelerin bir kombinasyonu olan her karmaşık komut, programın nispeten bağımsız parçalara bölünmesini sağlayan yalnızca bir giriş ve çıkış noktasına sahiptir.

Yapısal programlama, uygulama tekniklerinin zorunlu programlara uygulanmasının sonucudur. Bunun için, bir programı bir dizi prosedür olarak tanımlamanın mümkün olduğu prosedür yönelimli diller kullanılır. Prosedürler birbirini çağırabilir ve her biri bir prosedür olarak da düşünülebilecek ana program tarafından çağrılabilir.

Programın yapısı, programcı tarafından yapay olarak tahsis edilen programın etkileşim halindeki parçalarıdır. Akılcı bir yapının kullanılması, geliştirme karmaşıklığı sorununu ortadan kaldırır, programı kullanıcılar için anlaşılır hale getirir, test ve geliştirme süresini kısaltırken programın güvenilirliğini artırır.

Çoğu zaman, programın farklı yerlerinde belirli bir talimat dizisinin tekrarlanması gerekir. Programcının bu talimatları kopyalamak için zaman ve çaba harcamak zorunda kalmaması için, birçok programlama dili alt programları düzenlemek için araçlar sağlar. Programcı, talimat dizisine rastgele bir ad atama ve bu adı, karşılık gelen talimat dizisinin gerçekleştiği yerlerde kısaltılmış bir gösterim olarak kullanma fırsatı bulur. Dolayısıyla, bir alt yordam, bir programın birkaç yerinde çağrılabilen bir talimatlar dizisidir. Alt rutinler genellikle prosedürler ve işlevler olarak adlandırılır.

Bir alt yordamın açıklaması iki bölümden oluşur: başlıklar ve gövdeler. Başlık, alt yordamın tanımlayıcısını ve içinde kullanılan değişkenleri içerir. Gövde bir veya daha fazla talimattan oluşur. Alt rutin tanımlayıcı, programda karşılık gelen talimat dizisinin gerçekleştiği yerlerde bir kısaltma notasyonu olarak kullanılır.

Alt rutinler olarak adlandırılan prosedürler ve işlevler, bir programcının çalışmasının stili ve kalitesi üzerinde belirleyici bir etkiye sahip olan programlama sanatındaki birkaç temel araçtan biridir.

Prosedür, sadece bir program metnini kısaltmanın bir yolu değil, aynı zamanda bir programı, yapısını tanımlayan mantıksal olarak bağlantılı, kapalı elemanlara ayırmanın bir yoludur. Bir programı parçalara ayırmak, özellikle program karmaşıksa ve metnin çok uzun olması nedeniyle görülmesi zorsa, programı anlamak için çok önemlidir. Programın hem belgelenmesi hem de doğrulanması için alt programlara ayrıştırılması gereklidir. Bu nedenle, program yalnızca bir kez kullanılsa bile, bir talimat dizisinin bir alt yordam biçiminde formüle edilmesi arzu edilir ve bu nedenle, program metninin azaltılmasıyla ilişkili bir neden yoktur.

Bağımsız değişkenlerin karşılaması gereken değişkenler veya koşullar hakkındaki bilgiler prosedür başlığında belirtilir. Prosedürün kullanışlılığı, özellikle programın yapılandırılmasındaki rolü, programlamadaki iki kavramla tartışılmaz bir şekilde kanıtlanmıştır. Bir prosedür içinde kullanılan yardımcı veya yerel değişkenlerin onun dışında hiçbir anlamı yoktur. Bu tür değişkenlerin kapsamı açıkça belirtilmişse, bir programdaki bir yaratığı anlamak daha kolaydır. Prosedür, yerel değişkenlerin varoluş kapsamının sınırlı olduğu doğal bir metin birimi olarak hareket eder.

En yaygın programlama taktiği, bir süreci bireysel eylemlere ayırmaktır:

  • - alt işlevler için işlevsel açıklama;
  • - ayrı talimatlar için ilgili programlar.

Ayrıştırmanın bu tür her adımında, belirli sorunların çözümlerinin genel sorunun çözümüne yol açtığından, seçilen bireysel eylemler sırasının makul olduğundan ve programın uygulanacağı dile bir anlamda daha yakın talimatlar almanıza izin verdiğinden emin olmak gerekir. Bu gereklilik, sorunun ilk ayarından nihai olarak elde edilmesi gereken nihai programa kadar doğrudan ilerleme olasılığını dışlar. Ayrıştırmanın her aşamasına özel alt yordamların formülasyonu eşlik eder. Bu çalışma sırasında, mevcut araçları kullanarak alt rutinleri ifade etmenin sakıncalı olması açısından seçilen ayrıştırmanın başarısız olduğunu fark edebilirsiniz. Bu durumda, önceki ayrıştırma adımlarından biri veya daha fazlası yeniden gözden geçirilmelidir.

Adım adım ayrıştırmada ve programın eşzamanlı olarak geliştirilmesinde ve detaylandırılmasında kademeli olarak derinlemesine bir ilerleme görürsek, problem çözmedeki bu yöntem yukarıdan aşağı (yukarıdan aşağı) olarak karakterize edilebilir. Ve bunun tersi de, problemi çözmek için böyle bir yaklaşım, programcı ilk önce bilgisayarını veya programlama dilini incelediğinde, daha sonra çözülen problem için tipik olan temel prosedürlere bazı talimat dizileri topladığında mümkündür. Temel prosedürler daha sonra prosedür hiyerarşisindeki bir sonraki seviyede kullanılır. İlkel makine talimatlarından gerekli program uygulamasına geçmenin bu yöntemine aşağıdan yukarıya (aşağıdan yukarıya) denir.

Uygulamada, bir programın geliştirilmesi asla sadece tek bir yönde - yukarıdan aşağıya veya aşağıdan yukarıya - yürütülemez. Bununla birlikte, yeni algoritmalar tasarlarken, genellikle yukarıdan aşağıya yaklaşım hakimdir. Öte yandan, bir programı biraz değişen gereksinimlere uyarlarken, genellikle aşağıdan yukarıya yaklaşım tercih edilir.

Her iki yöntem de, onları amorf doğrusal talimat dizilerinden veya makine talimatlarından ayıran bir yapıya sahip programlar geliştirmenize olanak tanır. Kullanılan dilin bu yapıyı tam olarak yansıtması önemlidir. Ancak o zaman ortaya çıkan programın son şekli sistematik doğrulama yöntemlerinin uygulanmasına izin verecektir.

Bir program alt yordamlara bölünürse, sonuçları ve argümanları temsil etmek için yeni değişkenler eklemek ve böylece alt yordamlar arasında bağlantılar kurmak genellikle gereklidir. Bu tür değişkenler, gerekli oldukları geliştirme aşamasında tanıtılmalı ve açıklanmalıdır. Ayrıca, sürecin ayrıntılı açıklamasına, kullanılan değişkenlerin yapısının ayrıntılı açıklaması eşlik edebilir. Sonuç olarak, dil, verilerin hiyerarşik yapısını yansıtacak bir araca sahip olmalıdır. Bu, bir programın adım adım geliştirilmesinde prosedür kavramının, prosedürlerin ve verilerin yerelliğinin ve veri yapılandırmasının ne kadar önemli bir rol oynadığını gösterir.

Tasarım, harici spesifikasyonların sabitlenmesiyle başlar. Harici spesifikasyonlara dayanarak, zorunlu olarak dahili verilerin yapısıyla birlikte dahili program algoritmasının bir açıklaması hazırlanır. Ayrıca, modül boyutunun alt işlevine - özel ek gereksinimlerin getirildiği programlama dilinin alt yordamlarına - ulaşılana kadar büyük işlevler alt işlevlere bölünür.

Yapısal programlama teknolojisinin temel kavramı ve işlevsel öğesi bir modüldür.

Bir modül bir alt programdır ancak aşağıdaki kurallara göre dekore edilmiştir:

  • 1. Modülün bir girdi ve bir çıktıya sahip olması ve doğal (Rusça) dilin basit bir ortak cümlesiyle veya hatta bir yüklem içermeyen bir cümle ile tanımlanan, kesinlikle belirsiz olmayan bir işlevi gerçekleştirmesi gerekir
  • 2. modül, diğer modüllerden bağımsız olarak, modüllerin tüm dahili değerlerini "unutarak" derleme sağlamalıdır;
  • 3. bir modül diğer modülleri isimleriyle çağırabilir;
  • 4. İyi bir modül, başka bir modülle iletişim kurmak için genel değişkenleri kullanmaz, çünkü o zaman verileri bozan bir modül bulmak zordur. Global değişkenleri kullanırken, yalnızca okuyan modüller ve verileri değiştirebilen modüller hakkında net bir şekilde yorum yapmanız gerekir;
  • 5. modül yalnızca standart yapılarla kodlanır ve ayrıntılı bir şekilde yorumlanır.

Program yapısı kavramı, programın bağımsız işlevlerini uygulayan tüm modüllerin bağlantılarının bileşimini ve açıklamasını ve hem bireysel alt programlar arasında hem de harici cihazlardan giriş ve çıkış arasında değişime katılan veri taşıyıcılarının açıklamasını içerir.

Karmaşık, büyük bir program olması durumunda, programın rasyonel bir yapısını elde etmek için özel tekniklerde uzmanlaşmak gerekir. Programın rasyonel yapısı, programlama miktarında neredeyse iki kat azalma ve testin kapsamı ve zamanlamasında çok yönlü bir azalma sağlar, bu nedenle geliştirme maliyetlerini temelde azaltır.

Modüllerin bağımlılığını bir hiyerarşi diyagramı ile tasvir etmek uygundur. Hiyerarşi diyagramı, yalnızca alt yordamların alt düzenini yansıtır, ancak çağrıldıkları sırayı veya programın işleyişini yansıtmaz.

Hiyerarşinin bir diyagramını çizmeden önce, programın harici özelliklerini çizmeniz ve değişkenlerin - veri taşıyıcılarının açıklamasıyla birlikte programın işlevsel açıklamalarının hazırlanması tavsiye edilir. Yapılandırılmış veri türleri hiyerarşisine ve bunların yorumlarına özel dikkat gösterilmelidir. Bir programın alt yordamlara ayrıştırılması, genelden özele, daha ayrıntılı ilkeye göre gerçekleştirilir. İşlevsel bir tanım oluşturma ve bir hiyerarşi haritalama süreci yinelemelidir. En iyi seçeneğin seçimi çok kriterlidir.

  • - programların modülerliği;
  • - program modüllerinin yapısal kodlaması;
  • - rasyonel bir program modülleri hiyerarşisinin yukarıdan aşağıya tasarımı;
  • - Programın taslaklar kullanılarak yukarıdan aşağıya uygulanması
  • - projenin tüm aşamalarında planlamanın uygulanması;
  • - Yazılım sistemlerinin bir bütün olarak uçtan uca yapısal kontrolü ve bunları oluşturan modüller.

Programların modülerliği, tüm programın modüllerden oluşması ile karakterize edilir. Bazı anlamsal modül grupları ayrı dosyalarda yoğunlaşmıştır. Örneğin, metin düzenleyici modülleri ve hiyerarşik menü modülleri ayrı dosyalarda (Birim) yoğunlaştırılabilir.

Program modüllerinin yapısal kodlaması, metinlerinin özel tasarımından oluşur. Modül, modülün işlevselliğini açıklayan bir yorumla birlikte kolayca ayırt edilebilen bir başlığa sahip olmalıdır. Değişken isimleri anımsatıcı olmalıdır. Değişkenlerin özü ve bunlara bilgi yerleştirme sırası yorumlarla açıklanmalı, modül kodu girintiler kullanılarak standart algoritmik yapılar kullanılarak kodlanmıştır.

Rasyonel bir program modülleri hiyerarşisinin yukarıdan aşağıya tasarımı, hiyerarşinin en yüksek seviyesinin ilk modüllerini ve ardından alt modülleri izole etmektir.

Programın yukarıdan aşağıya uygulanması, programın çekirdeği olarak adlandırılan bir grup üst düzey modülün ilk uygulamasından oluşur ve ardından plana uygun olarak kademeli olarak alt düzey modüller uygulanır. Bağlantı için gerekli programlar, eksik modüller stub'lar tarafından taklit edilir.

Projenin tüm aşamalarında planlamanın uygulanması, başlangıçta hem aşamaların bileşimini hem de işin tüm aşamalarının süresini planlamanıza izin verir. Bu planlama, geliştirmenin belirli bir geliştirme maliyetinde zamanında tamamlanmasını sağlar.

Uçtan uca yapısal kontrol, harici spesifikasyonların geliştirilmesinden, ilave dahili spesifikasyonlara ve bunların uygulama dönemi boyunca kabul testlerine kadar düzeltilmesine kadar geçen süreyi kapsayan önceden belirlenmiş bir test planına bağlı kalmayı içerir. Programı oluşturan modüller, hem kod yazılırken hem de çevrimdışı test sırasında, kaynak kodlarının incelenmesi sırasında, test sırasında çekirdeğe bağlandıktan hemen sonra test edilir.

Yapısal programlamada, program genellikle yukarıdan aşağıya uygulanır (oluşturulur ve test edilir). Önce 20-30 modülden bir çekirdek yazılır. Teste başlamak için, eksik olan alt seviye modüller saplamalarla değiştirilir. Çekirdek testinin sonunda, saplamalar yeni hazır modüller ile değiştirilir, ancak program henüz bitmemişse, onu başarılı bir şekilde bağlamak için eksik modüllerin tüm yeni saplamalarına ihtiyaç duyulacaktır. Daha sonra monte edilen parça test edilir vb.

Saplama, sahte bir modüldür. En basit saplama, eylemsiz bir program veya işlevdir. Daha karmaşık bir saplama, şu ve böyle bir modülün çalıştığını belirten bir mesaj görüntüleyebilir. Daha karmaşık saplamalar, girdi bilgilerini bir hata ayıklama dosyasına verebilir. Son olarak, daha karmaşık saplamalar, halihazırda uygulanmış modülleri doğrulamak için gereken test bilgilerini verir. Taslaklar yazmak gereksiz bir iştir, ancak tasarımcının olabildiğince çok taslağı olabildiğince basit tutması ve programın halihazırda birleştirilmiş parçasının testini tamamlaması becerisi gerektirir.

Program yapısının tasarımından önce harici işlevsel tanımların geliştirilmesi gelmektedir. Algılamalarına ulaşmak için fonksiyonel açıklamalar (program yürütme algoritmaları) genelden özele ayrıştırılmalıdır. Ayrıca sunum biçiminin ve dahili verilerin hacminin açıklamalarını da içermelidir.

Başlangıç \u200b\u200bolarak, hiyerarşi şemasının, basitçe program işlevlerini alt işlevlere bölerek elde edilen, verileri farklı işlem adımlarına yerleştirmek için gerekli değişkenleri belirten ilk sürümü vardır. Aksine, bu seçenek optimal değildir ve devre topolojisini iyileştirmek için tasarım yinelemeleri gereklidir.

Her yeni sürüm, burada açıklanan kriterlere göre önceki sürümle karşılaştırılır. Daha fazla iyileştirme mümkün olmadığında varyant oluşturma durur.

Hiyerarşi şemaları için optimallik kriterleri fonu, hiyerarşi şemalarını optimize etmek için gerekli bir yardımdır ve aşağıdaki kriterlerden oluşur:

  • - belirli işlevlerin yerine getirilmesinin tamlığı;
  • - daha önce belirtilmemiş yeni işlevlerle hızlı ve ucuz bir şekilde yenileme yeteneği;
  • - program bileşenlerinin tasarımcısı için görünürlük;
  • - programın ayrı bölümlerinin verilerine göre maksimum bağımsızlık;
  • - programı kapsamlı bir çok seviyeli hiyerarşi şemasına belirli bir bağlayıcıyla (bağlayıcı) bağlama yeteneği. Yeni bir program üzerinde çalışma başlarsa, modelini herhangi bir eylem içermeyen boş modül saplamaları şeklinde bir bilgisayarda çalıştırmak çok yararlıdır;
  • - RAM'in yeterliliği. Burada seçenekler, hiyerarşi şemasının farklı seviyelerinde özellikle yapılandırılmış statik ve dinamik değişkenlerin açıklamasıyla birlikte değerlendirilir. Bu kriterin karşılanmasının doğrulanması bazı makine deneyleri ile yapılan hesaplamalarla gerçekleştirilir;
  • - hiyerarşi şemasının topolojisinin, bindirmeleri kullanırken program yürütme hızı üzerindeki etkisinin (programın dinamik yüklenmesi) ve tamamen RAM'de konumlandırılamayan bir program geliştirirken sayfalama mekanizmasının değerlendirilmesi;
  • - benzer eylemleri gerçekleştiren farklı modüllerin olmaması. İdeal olarak, aynı modül hiyerarşi şemasının farklı seviyelerinde çağrılır;
  • - Projenin kilit tarihlerine göre ekibin tek tip iş yükünü sağlayan programcı ekibinin çalışmasının böyle bir ağ takviminin programının uygulanması sırasında başarı;
  • - Programın halihazırda bir araya getirilmiş çekirdeğini test etme maliyetini ağ uygulama programının önemli tarihlerine kadar kapsamlı bir şekilde düşürmek. Kullanılan saplamaların basitliği ve modüllerin tüm hesaplama yolları boyunca test kalitesiyle karakterizedir. Hiyerarşi şemasının kalan dallarının uygulanmasında bir gecikme ile programın giriş ve çıkış modüllerinin yukarıdan aşağıya birincil uygulamasıyla elde edilir. Tipik olarak, test maliyetleri toplam proje maliyetinin yaklaşık% 60'ını oluşturur. İyi bir hiyerarşi şeması, test maliyetlerini orijinal sürüme kıyasla 2-5 kat veya daha fazla azaltır;
  • - Bu projede, minimum miktarda yeni üretilmiş parça ile önceki projelerde geliştirilen çok sayıda modül ve kitaplığın kullanılması;
  • - derlenmiş program dosyaları ve kitaplıklar arasında modüllerin başarılı bir şekilde dağıtılması;
  • - Tüm yeni gelişmelerde kullanılmak üzere hazır modüller ve modül kitaplıkları birikimi.

Sonuç olarak, programlamaya yönelik yapısal yaklaşımın karmaşık teknik sistemlerin tasarımından birçok yöntemi benimsediği ve kullandığı not edilebilir. Bunlar arasında, karmaşık sistemlerin tasarımına yönelik blok hiyerarşik yaklaşım, program oluşturma aşamaları, yukarıdan aşağıya tasarım, değerlendirme ve planlama yöntemleri bulunmaktadır.

işlevsel yaklaşım programlamaya.

Her şeyden önce, ortaya çıkmasına neden olan temel matematiksel araştırma tarihine dönelim. işlevsel yaklaşım programlamaya.

Doğrulayan teorik çalışmaların ortaya çıkma zamanı işlevsel yaklaşım, XX yüzyılın 20-30'larına atıfta bulunur. Daha sonra göreceğimiz gibi, teori genellikle programlama pratiğinin çok ilerisindedir ve yaklaşımın matematiksel temelini oluşturan en önemli çalışmalar, bu teoriyi potansiyel olarak uygulayabilecek bilgisayarların ve programlama dillerinin ortaya çıkmasından çok önce yazılmıştır.

İlk uygulamaya gelince, aşağıda tartışılacak olan LISP dili biçiminde XX yüzyılın 50'li yıllarında ortaya çıktı.

En önemli özelliği hatırlayın işlevsel yaklaşım fonksiyonel bir programlama dilinde geliştirilen herhangi bir programın, argümanları muhtemelen aynı zamanda fonksiyon olan bir fonksiyon olarak düşünülebileceği gerçeğidir.

Işlevsel yaklaşım atası daha önce de belirtildiği gibi olan bütün bir dil ailesini doğurdu programlama dili LISP. Daha sonra, 70'lerde, ML dilinin orijinal versiyonu geliştirildi ve daha sonra özellikle SML'de ve bir dizi başka dilde geliştirildi. Bunlardan belki de "en genç", 90'lı yıllarda oldukça yakın zamanda oluşturulan Haskell dilidir.

Dilleri uygulamanın önemli bir avantajı fonksiyonel programlama otomatiktir dinamik bellek tahsisi veri depolama için bilgisayar. Aynı zamanda, programcı verileri kontrol etme ihtiyacından kurtulur ve gerekirse işlevi başlatabilir. çöp toplama - program tarafından artık ihtiyaç duyulmayan verilerden hafızanın temizlenmesi.

Karmaşık programlar işlevsel yaklaşım toplama işlevleri tarafından oluşturulur. Bu durumda, program metni bir işlevdir ve bazı argümanları aynı zamanda işlevler olarak da düşünülebilir. Böylece, kodun yeniden kullanımı, prosedürün aksine, yapısı daha önce açıklanan işlevi çağırmaya indirgenmiştir. zorunlu dil, matematiksel olarak şeffaf.

İşlev, işlevsel programlama dilleri için doğal bir biçimcilik olduğundan, işlevlerle ilgili programlamanın çeşitli yönlerinin uygulanması büyük ölçüde basitleştirilmiştir. Yazı sezgisel olarak şeffaf hale gelir özyinelemeli işlevleryani kendilerini argüman olarak adlandıran işlevler. İşlemenin uygulanması doğal hale gelir. yinelemeli veri yapıları.

Uygulama yoluyla desen eşleştirme motoruML ve Haskell gibi işlevsel programlama dilleri sembolik işlem için iyidir.

Doğal olarak, işlevsel programlama dillerinin bazı dezavantajları yoktur.

Genellikle doğrusal olmayan bir program yapısı içerirler ve nispeten düşük uygulama verimliliği... Bununla birlikte, ilk dezavantaj oldukça özneldir ve ikincisi, modern uygulamalarla, özellikle Microsoft ortamı için bir derleyici de dahil olmak üzere SML dilinin en son çevirmenleri tarafından başarıyla aşılmıştır. AĞ.

Fonksiyonel programlama dillerinde profesyonel yazılım geliştirme, bir fonksiyonun doğasının derinlemesine anlaşılmasını gerektirir. Bu dersin 2 - 12 numaralı dersleri, esas olarak işlevlerin doğasının kalıpları ve özelliklerinin incelenmesine ayrılmıştır.

Matematiksel resmileştirmede ve yazılım uygulamasında "fonksiyon" teriminin farklı kavramlar anlamına geldiğine dikkat edin.

Yani, matematiksel fonksiyon A alanı ve B aralığı ile f, sıralı çiftler kümesidir

öyle ki eğer

b 1 \u003d b 2.

Sırasıyla, programlama dilinde fonksiyon bir argümanı (sözde gerçek parametre) bir sonuca dönüştürmek için kuralları tanımlayan bu dilin yapısıdır.

Kavramı resmileştirmek için "

Ders 1. Nesneye yönelik programlama.

Nesneye Yönelik Programlama (OOP), büyük programlar yazarken baskın stildir. Programlamaya yapısal bir yaklaşımın gelişimindeki ana aşamalar, ilişkiyi daha iyi anlamaya yardımcı oluryapısal yaklaşım, modüler programlama ve OOP.

8.1. Programlamaya yapısal yaklaşım.

Program oluşturmanın birim maliyeti yakın zamana kadar çok az değişti. Programın hacminin artmasıyla, yaratımının birim maliyeti doğrusal olmayan bir şekilde artabilir. Karmaşık programları oluşturma süresi, program hacminin karesiyle veya hatta küpüyle orantılıdır. Bu nedenle, programlama teknolojisinin gelişimini belirleyen ana faktörlerden biri, yazılım ürünlerini (PP) tasarlama ve oluşturma maliyetini düşürmek veya programlamanın karmaşıklığıyla mücadele etmektir.

PCB tasarımı ve oluşturma yöntemlerinin gelişimini etkileyen diğer faktörler şunlardır:

Bilgi işlem tesislerinin (CS) mimarilerini artırmak için değişen
performans, güvenilirlik;

Hava taşıtı ile kullanıcı etkileşiminin basitleştirilmesi ve uçağın fikirlendirilmesi.
Son iki faktörün etkisi, uçak yazılımının karmaşıklığındaki bir artışla ilişkilidir.Karmaşıklık programlama ve programların doğal bir özelliğini temsil eder.belirir program yaratma süresi ve maliyeti, program metninin hacmi veya uzunluğu, mantıksal yapısının özellikleri, kontrol transfer operatörleri (dallar, döngüler, alt rutin çağrıları) tarafından belirlenir.

5 programlama karmaşıklığı kaynağı vardır:

Çözülmesi gereken sorun;

Programlama dili;

Program yürütme ortamı;

Yazılımın kolektif geliştirme ve yaratılmasının teknolojik süreci;

Algoritmaların ve veri türlerinin çok yönlülüğü ve verimliliği için çabalamak.

Karmaşıklığın özelliği ortadan kaldırılamaz, ancak tezahürünün özellikleri yönetim veya organizasyon tarafından değiştirilebilir.

Programlamada yaygın olarak kullanılırtemel prensip eski zamanlardan beri insanın bildiği karmaşık sistemlerin yönetimi -devide et impera (böl ve fethet, enlem.) ve herhangi bir karmaşık teknik sistemin geliştirilmesinde ve tasarımında kullanılır. Bu ilkenin ilk bölümüne göre, karmaşık bir yazılım sistemi tasarlarken,algoritmik ayrıştırmasorun çözülüyor.

Ayrıştırmanın amacı, geliştirilmekte olan sistemi, etkileşimli küçük alt sistemler (modüller veya bloklar) biçiminde temsil etmektir.hata ayıklama diğerlerinden bağımsız olarak. Alt sistemlere bölünmüş bir sistem tasarlarken, böyle bir ayrım olmadığından çok daha az ayrıntıyı aklınızda tutmanız gerekir.

Terim ile birlikteayrışma, ayrıca terimi kullandıyapılandırma sorunlar, görevler veya programlar. Programları, belirli prosedürleri ve işlevleri uygulayan ve belirli bir ilişkiler hiyerarşisi oluşturan nispeten bağımsız büyük parçalara bölme fikirleri,yapısal yaklaşımyazılım geliştirme ve yaratma. Programlamada, yapılandırılmış yaklaşım, ilk alt yordamların ve yazılan fonksiyonların ortaya çıkmasıyla ortaya çıktı.usule yönelik stil.Bu stil şu kurala dayanır: bilgisayar belleğinde saklanması gereken değişkenleri ve sabitleri tanımlayın ve bunların işlenmesi için algoritmayı açıklayın.

Yapısal yaklaşım teorik biçimini 70'lerin başında programlama teorisyenlerinin ve uygulayıcılarının eserlerinde aldı (A.P. Ershov, E. Yodan, N. Virta). Programın yapısını sıralama fikrinin belirli bir yansıma bulduğu yapısal programlamanın ortaya çıkışına dikkat edilmelidir.Yapısal programlamayapısı operatörlerin veya blokların "ağacına" yakın olan programların derlenmesine odaklanır. Ağaç tipi bir yapının bir tür standart olarak kullanılması, analiz edilmesi ve uygulanması kolay bir yapı olmasıyla açıklanmaktadır.

Yapısal yaklaşımın daha da geliştirilmesi,modüler programlama.Uygulamalı bir problemin, etkileşim halindeki modüllerin veya programların bir hiyerarşisi şeklinde ayrıştırılmasını sağlar. İşlemleri için veri ve prosedürleri içeren bir modül, çevrimdışı geliştirme ve oluşturma için uygundur. Modüllerin işleme türlerine göre uzmanlaşması ve içlerinde belirli veri türlerinin bulunması, modüler programlama ile OOP arasındaki ilişkiyi yansıtan özelliklerdir.

Neredeyse evrimin tüm yönlerini yansıtan PCB üreticilerinin en önemli araçları;programlama dilleri.

Programlama dili başlangıçta bir bilgisayara odaklanır ve bilgisayarın donanımını ve yazılımını kontrol etmek için kolayca komutlara dönüştürülebilen bir dizi veri türü, operatör, işlem, işlev içerir. Bu durumda, gerekli belleği, program yürütme süresini ve bir çevirmen yaratma maliyetini en aza indirmek anlamında, dil cümlelerinin makine kodlarına çevrilmesinin etkinliğinin maksimize edilmesi arzu edilir. Aynı zamanda, programlama dili programcıya odaklanır ve programlar biçiminde belirli bir konu alanındaki uygulamalı problemleri çözerken nesneleri, özelliklerini ve davranışlarını modellemek için araçlar sağlar.

Dillerin uygulama programlarını derlemenin verimliliğini artırma yönünde gelişmesi, dillerin aşağıdaki seviyelere ayrılmasına yol açmıştır:

Düşük seviye (makine odaklı diller - montaj dilleri),

Yüksek seviye (yordamsal yönelimli diller:FORTRAN, ALGOL,

PL / 1, Pascal),

Çözülen sorunun seviyesi (probleme yönelik diller -SQL).

Veri türlerine giriş programlama teknolojisinin gelişiminde başka bir yön belirledi. Veri tiplemenin amacı, hem programlamayı kolaylaştırmak hem de işlevler çağrılırken işlenenler ve gerçek parametreler biçimindeki verilerin kullanımındaki hataların tespitini otomatikleştirmek.

Kullanma yapılandırılmış veri türleriİlk olarak, uygulanan problemin veri yapıları ile yazılım modüllerinin fonksiyonları tarafından işlenen verileri karşılaştırırken algoritmanın çalışmasını basitleştirmeye ve ikinci olarak, işleme algoritmasını kodlarken programcının rutin çalışma miktarını azaltmaya izin verir.

"Veri türü" kavramının genelleştirilmesinin sonucu:sınıflar yalnızca belirli bir türdeki verileri değil, aynı zamanda işlemlerinin yöntemlerini (işlevler) de içerebilen nesneler (C ++).

Böylelikle hem programlarda hem de veri türlerinde programlama teknolojisinin gelişmesiyle birlikte uygulanan problemin yapısı giderek daha iyi yansıtılmış ve buna karşılık gelen veri ve programların modüllere entegrasyonu sağlanmıştır. Aynı zamanda programlama dilleri yenilendianlamına geliyor için gerekliaçıklamalar benzer yapılar. Soyutlama ve modülerlik fikirlerinin gelişimi, programlamada ortaya çıkmasına neden oldunesne yaklaşımı.

Kişi imgeler veya nesneler üzerinde düşünür, özelliklerini bilir ve belirli olaylara göre onları manipüle eder. Eski Yunanlılar, dünyanın nesneler ve olaylar şeklinde görülebileceği fikrine sahipti. İnsanlar genelliklenesne odaklıdünyanın görünümü. Böylece, bir telefon hakkında düşünen kişi, yalnızca şeklini ve rengini değil, aynı zamanda arama yeteneğini, zil sesinin doğasını ve diğer bazı özellikleri (teknik bilgisine, hayal gücüne bağlı olarak) hayal edebilir.

Programlama dili, modellenen nesnelerin özelliklerini ve nesnelerle manipülasyon sırasını veya çözülen problemin koşullarına göre bunların etkileşim sırasını tanımlamanıza olanak tanır. İlk programlama dilleri matematiksel nesnelere, belirli bir hesap makinesi modeline odaklandı. Bu nedenle değişken, sabit, fonksiyon, biçimsel ve gerçek parametreler gibi yapıları içeriyorlardı. Programcılar programlarını etkileşimli işlevler ve modüller olarak sundular. Programlamanın doğası prosedür yönelimliydi ve öncelik veriler içeren eylem dizilerine verildi. Buna göre, gibi programlama dilleriFORTRAN, PL -1, C denir usul odaklı.

Veriler ve alt yordamlar, uygulamalarının belirli alanları için karmaşık yazılım sistemleri oluşturan tasarımcıların mantığına uygun olarak modüller halinde birleştirildi. Modüllere entegrasyon mantığı, aralarında not edilmesi gereken bir dizi faktör tarafından belirlendi.etki alanı özellikleri: konu alanındaki belirli bir nesne sınıfına karşılık gelen veriler ve bunların işleme rutinleri bir modülde birleştirildi. Dolayısıyla, dizi işleme modülü, dizelerle temel işlemleri gerçekleştirmek için işlevler içeriyordu: bir dizinin uzunluğunu birleştirme, karşılaştırma, kopyalama, hesaplama.

Modüler programlama fikrinin gelişimi, etki alanı (modellenmiş nesneler) program yapılarının nesnelerinin eşlenmesidir.nesneler nesne türleriveya sınıflar (modelleme nesneleri). Modelleme nesneleri, modellenen nesnelerin özelliklerini tanımlayan verileri ve fonksiyonları içerir. Bu nedenle veriler, nitelik veya niceliksel özellikleri (kütle, uzunluk, güç, fiyat) yansıtabilir ve işlevler davranışsal veya operasyonel özellikleri yansıtır (kütle değiştir, gücü hesapla, fiyatı belirle). Böylelikle nesne yaklaşımı ile verilerin entegrasyonu ve işleme fonksiyonları, konu alanının yapısı tarafından, yani bir dizi modellenmiş nesne tarafından, çözülen problem çerçevesinde etkileşimleri belirlenir.

Modellenen nesne, parçalardan veya diğer nesnelerden oluşabilmesine rağmen, kişiye her zaman tek, bütünsel bir şey olarak görünür. Bir nesnenin, özelliklerinin veya bileşenlerinin birbirine bağlı bir kümesi biçiminde bütünsel bir temsilitemel prensip nesne yaklaşımı.

Nesne yaklaşımı programlamada 70'lerden beri gelişmeye başladı (Smalltalk, KAPALI, Ada ). Bu diller denirnesne. Hiyerarşik sınıflandırma nesneler ve miras özellikler, 1980'lerde ortaya çıkan nesne yönelimli yaklaşımın başlangıç \u200b\u200bnoktasıdır. Nesne yönelimli programlama stilinin nispeten yavaş gelişmesinin nedenlerinden biri, yordam yönelimli stilden önemli farkıdır.

8.2. Nesneye yönelik programlama kavramları.

OOP, yapılandırılmış bir yaklaşımın geliştirilmesinde üçüncü ana aşamadır (yapılandırılmış ve modüler programlamadan sonra). 70'lerin ortalarında oluşturulan büyük yazılım sistemleri, prosedürel bir tarz çerçevesinde yapılandırılmış bir yaklaşımın kullanılmasının istenen etkiyi vermediğini gösterdi. Oluşturulan yazılım sistemlerindeki bileşen sayısı arttıkçahata sayısı usullerin uygunsuz kullanımıyla ilişkili veyanlış bileşenler arasındaki ara bağlantıları dikkate alarak doğrusal olmayan bir şekilde büyümeye başladı. Bu sistemlerin devreye alınma tarihleri \u200b\u200bsürekli kesintiye uğruyordu. Bu tür hataların sayısını azaltmak ve tespitini basitleştirmek,algoritmik ayrıştırmaçözülen problemin uzayının "doğal" öğelerine (bileşenleri veya nesneleri) odaklanmak. Bu durumda, kodlama ve hata ayıklama aşamasında, programlama yapılarının simüle edilmiş nesnelerle karşılaştırılmasını basitleştirdi.

Bu ayrışmaya denir çözülen sorunun alanı veya konu alanı. Nesneye yönelik analizin ve sonraki yazılım sentezinin sonuçlarını açıklamak için, belirli ilkeler üzerine inşa edilmiş yeterli dil araçlarına ihtiyaç vardır.

OOP'nin temel kavramınesne veya sınıf c ++ 'da iki açıdan görüntülenebilir. Birincisi, konu alanı açısından:sınıf bu alanın belirli bir karakteristik nesnesine karşılık gelir. İkinci olarak, bu yazışmayı uygulayan programlama teknolojisi açısından: OOP'deki bir "sınıf", en önemli üç özelliğe sahip özel bir program yapısıdır:

Kapsülleme;

Kalıtım;

Polimorfizm.

Bu özellikler programcı tarafından kullanılır ve nesne yönelimli bir programlama dili (bu dili uygulayan bir çevirmen) tarafından sağlanır. İzin veriyorlaryeterince konu alanının yapısını yansıtır.

Nesneler ve Sınıflar.

Nesne kavramı, konu alanının ilgili nesnelerinin niteliklerini ve davranışını (durum ve işleyiş) birleştiren program birimleri biçiminde konu alanı kavramlarının modellenmesi (görüntülenmesi) için tasarlanmıştır.

Object sınıfı veri ve fonksiyonların tek bir bütün oluşturduğu ve simüle edilmiş alan içerisinde bu bütünün özelliklerini ve davranışını yansıttığı bir yazılım yapısıdır. Verilerin ve işlevlerin bileşimine daha az anlamsal kısıtlamanın getirildiği bir modülün aksine, bir nesne yalnızca belirli bir türdeki bir nesnenin özelliklerini ve davranışını tanımlamak için gerekli olan verileri ve işlevleri içerir.

Fikirler kullanılarak alan analizi sürecinde nesneler vurgulanırsoyutlamalar ilgisiz vesınıflandırma ilgili nesneler. Nesneye yönelik analiz sonuçlarınesne sınıfları,çözülen ve biçimlendirilen problem alanında mevcut veya gelecekte mevcut olabileceksınıf hiyerarşileri,olarak temsilmülkiyet miras ağaçları.

Böylece, havacılık teknolojisinin analizine dayanarak, bir nesne sınıfı ayırt edilebilir.Uçak. Aynı zamanda, kanatların şekli, kanatların uzunluğu, kullanılan yapı malzemeleri, kanatların konumu gibi özelliklerden de soyutladık. Bir nesne sınıfının ana özellikleri arasındaUçak şunları içerir: uçuş hızı, kanat açıklığı, motor tipi, taşıma kapasitesi, uçuş yüksekliği, işlevsel amaç.

Bir nesne sınıfının benzersiz bir özellik kümesi vardır ve herhangi bir veri türü gibi benzersiz bir ad atanır. Program değişkenlerinesneler belirli bir sınıf. Oluşturulan nesneler, aynı sınıftan bile olsa, özelliklerin değerleri (tezahür derecesi) açısından farklılık gösterebilir ve adlar açısından farklılık gösterebilir.

Nesne özelliklerinin kapsüllenmesi.

Kapsülleme ("Sarılmış içerik"), bu verileri işleyen verilerin ve işlevlerin bir bütün olarak nesne içinde birleştirilmesi ve yerelleştirilmesidir. Birlikte, nesnenin özelliklerini yansıtırlar.

C ++ 'da, sınıf ve nesne verileri çağrılırveri öğeleriveya alanlar ve yöntemler olarak işlevler veya elemanlar-fonksiyonlar.

Nesnenin alanlarına ve yöntemlerine, nesnenin adı ve ilgili alan ve yöntem adları aracılığıyla seçim işlemleri kullanılarak erişilir "." ve "-\u003e". Bu, nesnenin içeriğini dış ortamdan maksimum ölçüde izole etmeyi, yani nesnenin öğelerine erişimi kısıtlamayı ve görsel olarak kontrol etmeyi mümkün kılar. Sonuç olarak, bir nesnede kapsüllenmiş alanların ve yöntemlerin değiştirilmesi veya değiştirilmesi, genellikle programın tamamı için kötü kontrol edilen sonuçlara sahip değildir. C ++ 'da bu nesnenin açıklamasının gövdesindeki bir nesnenin adını belirtmek gerektiğinde, ayrılmış bir kelime kullanılırbu, nesnenin içinde nesne adı için özel bir eşanlamlıdır - nesneye bir işaretçi.

Kapsülleme neden gereklidir? Cevap basit, biz insanız. Ve hata yapmak insan doğasıdır. Hiç kimse hatalara karşı bağışık değildir. Kapsülleme kullanarak, nesneye ait verileri doğrudan bu verilere erişirken ortaya çıkabilecek olası hatalardan koruyan bir kale inşa ediyoruz. Ek olarak, bu ilkenin uygulanması çoğu zaman program kodundaki olası hataların yerelleştirilmesine yardımcı olur. Ve bu, bu hataları bulma ve düzeltme sürecini büyük ölçüde basitleştirir.

Kapsüllemenin verileri gizlemek anlamına geldiğini söyleyebiliriz (veri gizleme ) bu verileri korumak için.

Ve şimdi kapsüllemenin özünü tam olarak tanımlayan bir tanım:

Nesnenin durum değişkenleri dış dünyadan gizlenir. Bir nesnenin (değişkenlerinin) durumunu değiştirmek YALNIZCA yöntemlerini (işlemlerini) kullanarak mümkündür.

Bu neden bu kadar önemli? Bu ilke, nesne durum değişkenlerini kötüye kullanımdan korur.

Bu, bir nesnenin kabul edilemez bir duruma sokulması ve bu nesnenin yetkisiz olarak imha edilmesi olasılığını önemli ölçüde sınırlar.

Yukarıdaki varsayımı açıklamak için bir örnek düşünün.

Arabanızın çalışmadığını ve ne yazık ki bir tamirci olmadığınızı ve arabalar hakkında fazla bir şey bilmediğinizi hayal edin. Kapağı açarsınız ve birkaç hortum çekmeye, bir şeyler bükmeye vb. Başlıyorsunuz. Neyi, nerede ve nasıl çekip çıkardıklarını hatırlarsanız iyi olur. Ve değilse? Ya da yakıt seviyesi okunuz sıfırda, ancak çok fazla yakıtınız olduğunu ve yakıt seviyesini kontrol etmek için kibritlerle benzin deposunun içine tırmandığınızı düşünüyorsunuz. Ne gibi sonuçlar bekleyebilirsiniz? En iyi ihtimalle, çok şanslıysanız, siz ve arabanız hayatta kalacaksınız. Aynısı, son derece karmaşık olabilen nesnelerimiz için de geçerlidir ve iç organizasyonlarını temsil etmeden içlerindeki bir şeyi düzeltmeye çalışıyorsunuz.

Arabayı kendinize ve arabanın kendisine zarar vermeden tamir etmek için, her biri arabanızın yalnızca belirli bir bölümünde iyi bilgili olan kalifiye otomatik çilingirleri davet etmeniz gerekir. İç ampulünüzün yanmadığını söylerseniz, ampulün değiştirilmesi otomobillerin elektrikli ekipmanı uzmanı tarafından yapılacaktır. Aynı şekilde bizim nesnemizde. "Ustalar" vardır - belirli alanlarda "uzmanlaşan" yöntemler vardır, ancak onlar kendi alanlarını bilirler. Ve en önemlisi, bir nesneye zarar vermemek için durumunu nasıl değiştireceklerini bilirler. Açıklanan postülat basit bir gündelik bilgeliği yansıtır: eğer bilmiyorsanız, bir şeyi nasıl yapacağınız hakkında hiçbir fikriniz yoksa - nasıl doğru yapılacağını bilen birine sorun. Maalesef bu kuralı her adımda ihmal ediyoruz. OOP'de, bu kuralı bir yasa olarak tanımlıyoruz: "Bir nesne amatörleri kabul etmez. Bir nesnenin durumunu yalnızca uzmanlar bir şekilde değiştirebilir." Bu ilkenin programlama için yeni olmaktan uzak olduğunu söyleyebilirsiniz.

Sınıfların, veri üyelerinin ve yöntemlerin adlandırılması OOP'de çok önemlidir. Adlar ya etki alanında kullanılan adlarla eşleşmeli ya da adı geçen sınıfın, alanın ya da yöntemin anlamını ya da amacını (işlevselliğini) açıkça yansıtmalıdır. Aynı zamanda, uzun isimlerden korkmamalısınız - ürünün hata ayıklaması ve bakımı sırasında yazma maliyetleri karşılığını alacaktır. Böyle bir programın metni, fazla yorum yapılmadan anlaşılır hale gelir. Verilere ve yöntemlere erişmenin ek bir yolu, belirteçler kullanılarak sınıf öğelerinin tanımlanmasıdır.özel, korumalı ve halka açık, bir sınıfın bileşenlerine üç uygun erişim düzeyi tanımlayan: özel, korumalı ve genel.

Özniteliklere sahip veri öğelerine erişimi genişletmek içinözel veya korumalı, sınıfta özniteliğiyle uygulanabilirhalka açık kendi ve korunan veri öğelerine erişim için özel yöntemler.

Bir sınıftaki yöntemler uygun olarak ilan edilebilir (arkadaş ) veya sanal (gerçek ). Bazen aşırı yük beyanını görürsünüz (aşırı yük) fonksiyonları.

Esnek erişim kontrolü, nesne özelliklerinin istenmeyen (kontrolsüz) bozulmalarını azaltmanıza veyayetkisiz sınıf özelliklerini kullanarak.

Bir atama operatörü kullanmadan veri öğelerine işlevleri veya yöntemleri kullanarak erişimi düzenlemek iyi bir OOP stilidir. Bu hüküm bir dogma değildir, ancak ondan ayrılma durumları iyi düşünülmelidir.

Mülkiyet mirası.

Miras alt öğelerini oluşturmak ve ebeveynlerinin özelliklerini (veri öğeleri ve yöntemler) devralmak için sınıfların bir özelliği vardır. Alt sınıf otomatik olarak her şeyi ebeveynden devralırveri öğeleri ve yöntemleri, ve ayrıca yeni veri üyeleri ve yöntemleri içerebilir ve hatta üst öğenin yöntemlerini değiştirebilir (geçersiz kılabilir, geçersiz kılabilir) veya bunları değiştirebilir (tamamlayabilir).

Bir örnek verelim gerçek hayattan miras. Doğa bilimlerinin birçok alanındaki araştırmacılar, zamanlarının aslan payını nesneleri belirli özelliklere göre sınıflandırarak harcarlar. Biyoloji ve zooloji dersinden, hayvanlar ve bitkiler için sınıflara, alt sınıflara, türlere ve alt türlere (veya buna benzer bir şeye) göre özel sınıflandırma ve bölünme ilkeleri olduğunu hatırlıyoruz. Sonuç, kökte bir genel kategori ve alt kategorilere ayrılan bir tür hiyerarşi veya ağaçtır.

Bazı yeni hayvanları veya nesneleri sınıflandırmaya çalışırken, şu soruları sorarız: Bu nesnenin genel sınıfın diğer nesneleriyle benzerliği nedir? Farklılıklar nedir? Her sınıfın kendisini tanımlayan bir dizi davranış ve özelliği vardır. İle başlıyoruz

örnek soy ağacının tepelerini ve dallara inip bu soruları sonuna kadar soracağız. Daha yüksek seviyeler daha geneldir ve sorular daha basittir: örneğin, kanat var mı yoksa hiç kanat yok mu? Her seviye bir önceki seviyeye göre daha spesifik ve daha az geneldir. Bir özellik tanımlandığında, bu tanımın altındaki tüm kategoriler bu özelliği içerir. Bu nedenle, bir sınıfın belirli bir temsilcisinden (düzen, tür) bahsettiğimizde, o zaman sınıfın genel özelliklerinden bahsetmemiz gerekmez, sadece bu sınıf içindeki belirli özelliklerinden bahsetmemiz gerekir.

Kalıtımın anlamı ve evrenselliği, her seferinde (sıfırdan) yeni bir nesneyi tanımlamanıza gerek olmadığı, ancak ebeveyni (temel sınıf) belirleyebilmeniz ve yeni sınıfın ayırt edici özelliklerini tanımlayabilmeniz gerçeğinde yatmaktadır. Sonuç olarak, yeni nesne, ana sınıfın tüm özelliklerine ek olarak kendi ayırt edici özelliklerine sahip olacaktır.

OOP kalıtımı, yeterince düşünmenize izin veriraile ilişkisikonu alanı nesneleri. B sınıfı, A sınıfının tüm özelliklerine ve ayrıca ek özelliklere sahipse, A sınıfı olarak adlandırılır.temel (ebeveyn) ve B sınıfı denirvaris a sınıfı. C ++ 'da mümkündüryalnız (bir ebeveynle) veçoğul (birden fazla ebeveynle birlikte) miras.

İlişki veyasınıf özellikleri ilişkileri içerir,sadece miras yoluyla değil, aynı zamanda bir sınıfta diğer sınıfların veri üyeleri olarak kapsülleme yoluyla da yansıtılabilir.

Miras özelliği, sınıf özelliklerini değiştirmeyi kolaylaştırır, OOP'ye olağanüstü esneklik sağlar ve eski sınıflara (ebeveynlere) dayalı olarak yeni sınıflar yazma maliyetini azaltır. Programcı genellikle en genel özelliklere sahip bir temel sınıfı tanımlar ve ardından belirli özelliklerine sahip bir alt sınıflar dizisi oluşturur. Sonuç, sınıf özelliklerinin kalıtım hiyerarşisidir.

Temel sınıflar veya bu tür ağaçların kökleri öylesine soyut özelliklere sahiptir ki, bunlar genellikle doğrudan programlarda kullanılmaz, ancak "yalnızca" gerekli sınıfları oluşturmak için gereklidir. Doğru kökü seçmek kolaylık sağlar. "yetiştirme "Ağaç, yani bir sınıf kitaplığının geliştirme kolaylığı. OOP kuralının uygulanması"Nesnelerin özelliklerini devralın ve değiştirin"büyük yazılım sistemlerini tasarlamak ve oluşturmak için aşamalı bir yaklaşıma iyi uyum sağlar.

İlgili sınıflara örnekler: Ekran koordinatları -\u003e Renk noktası-\u003e Doğrudan -\u003e Dikdörtgen. Burada okun yönü, sınıf özelliklerinin miras sırasını gösterir.

Sınıf açıklamasında temel (ebeveyn) sınıfı belirtirkenC ++ bir anahtar kelime gereklihalka açık ... Bu anahtar kelimenin belirtilmesi, en türetilmiş sınıfta tanımlanmış gibi, sınıfın tüm yöntemlerine ücretsiz erişime izin verecektir. Aksi takdirde, üst sınıfın yöntemlerine erişemeyeceğiz.

Sınıf mirasını açıklamaya bir örnekC ++:

a sınıfı

. . . . .

sınıf B: genel A

. . . . .

Nesnelerin davranışsal özelliklerinin polimorfizmi.

Polimorfizm kelimesi Yunanca kökenlidir ve "birçok biçime sahip" olarak çevrilir.

Polimorfizm teknik olarak farklı birçok problemi çözmek için tek ve aynı ismin kullanılmasına izin veren bir özelliktir.

Genel anlamda, polimorfizm kavramı "tek arayüz, birçok yöntem" fikridir. Bu, bir grup ilgili eylem için ortak bir arayüz oluşturabileceğiniz anlamına gelir. Polimorfizmin avantajı, tek bir eylem sınıfı için tek bir arabirime izin vererek programların karmaşıklığını azaltmaya yardımcı olmasıdır. Duruma bağlı olarak belirli bir eylemin seçimi derleyiciye bırakılmıştır.

OOP'ye uygulandığında, polimorfizmin amacı, bir sınıf için ortak eylemleri tanımlamak için tek bir ad kullanmaktır. Uygulamada bu, nesnelerin mesajda alınan verilerin türüne göre bir dahili prosedür (yöntem) seçme yeteneği anlamına gelir.

Bir kilidi açmanız gerektiğini ve bir sürü anahtar olduğunu hayal edin. Ve biz de onu açmaya çalışıyoruz. Her biri bazı parametrelere (şekil, boyut) sahip bir sürü anahtarımız var. Kapıyı açmak için uygun bir anahtar bulana kadar arka arkaya geçiyoruz. Şunlar. Kilidin modeli, anahtar parametrelerin modeliyle eşleştiğinde kilit açılır. Derleyici, birkaç işlev olduğunda aynı şekilde çalışır. Uygun bir tane bulana kadar aynı ada sahip işlev şablonlarını sırayla kontrol eder.

Polimorfizm aynı tür (ve hatta aynı adlandırılmış) eylemleri gerçekleştirmek için farklı şekillerde nesne-akrabalarının bir özelliği olarak tanımlayın, yani, bir dizi ilgili sınıfta aynı tür eylemlerin birçok farklı biçimi vardır. Örneğin, "ekranda çizim" yöntemi, ilgili sınıflar "nokta", "düz", "kırık", "dikdörtgen" için farklı şekilde uygulanmalıdır. OOP'de, bir nesnenin eylemleri veya davranışı bir dizi yöntemle belirlenir. Programcı, bir sınıfın neslindeki bir yöntemin algoritmasını değiştirerek, nesline belirli davranışsal özellikler verir. Bir yöntemi değiştirmek için, onu altta geçersiz kılmak gerekir, yani. Aynı adı taşıyan yöntemi altta bildirmek ve altta kalanın özgüllüğünü yansıtan gerekli eylemleri uygulamak.

Polimorfizmin özelliği, yalnızca özellikleri devralırken aynı adı taşıyan yöntemleri geçersiz kılma (örtüşen) mekanizmasında değil, aynı zamanda mekanizmada da gerçekleşir.yöntem sanallaştırma veya geç yöntem bağlama. Yöntem geçersiz kılma derleme zamanında uygulanırsa(erken bağlamanesneyi bir yöntemle), ardından sınıf açıklamasında bildirileni bir sanal (gerçek ) çalışma zamanında gerçekleşir(geç bağlama).

Bir kilo portakal satın almak için iki yaklaşımı karşılaştıralım. İlk durumda, 1 kg portakal almamız gerektiğini önceden biliyoruz. Bu nedenle küçük bir paket alıyoruz, çok değil ama bu kilograma yetecek kadar para. İkinci durumda, evden çıktığımızda neyi ne kadar satın almamız gerektiğini bilmiyoruz. Bu nedenle, bir araba alıyoruz (ve birdenbire birçok şey ve ağır olacak), büyük ve küçük boyutlarda paketler stoklayıp mümkün olduğunca çok para alıyoruz. Markete gidiyoruz ve sadece 1 kg portakal almamız gerektiği ortaya çıkıyor.

Yukarıdaki örnek, bir dereceye kadar sırasıyla erken ve geç bağlanmanın kullanılması anlamını yansıtmaktadır. Açıktır ki, bu örnek için ilk seçenek en uygunudur. İkinci durumda çok fazla şey gördük ama buna ihtiyacımız olmadı. Öte yandan, pazara giderken portakal ihtiyacımız olmadığına karar verirsek ve 10 kg elma almaya karar verirsek, ilk durumda bunu artık yapamayız. İkinci durumda, bu kolaydır.

Şimdi bu örneğe programlama açısından bakalım. Erken bağlamayı uygularken, derleyiciye "Ne istediğimi tam olarak biliyorum. Tüm işlev çağrılarını çok zor (statik olarak) bağla" deriz. Geç bağlama mekanizmasını kullanırken derleyiciye şöyle deriz: "Henüz ne istediğimi bilmiyorum. Zamanı geldiğinde, sana ne istediğimi ve nasıl istediğimi söyleyeceğim." Bu nedenle, erken bağlanma sırasında, arayan ve aranan uç ilk fırsatta, genellikle derleme zamanında bağlanır. Çağrılan yöntemin ve çağıran yöntemin geç bağlanmasıyla, derleme zamanında bağlanamazlar. Bu nedenle, çağrı gerçekten yapıldığında çağrılan ve çağıran yöntemlerin bağlanmasının nasıl gerçekleşeceğini belirleyen özel bir mekanizma uygulanmıştır.

Erken bağlanma ile hız ve verimliliğin, geç bağlama kullanımına göre daha yüksek olduğu açıktır. Aynı zamanda, geç bağlanma, bir miktar bağlanma çeşitliliği sağlar.

Gerekli ek bağlama adımları nedeniyle sanal yöntemlerin yürütülmesi daha yavaştır.

Nesnelerin yaratılması ve imhası.

OOP'de bir sınıfın tanımı, farklı adlara ve bireysel özelliklere sahip nesneler oluştururken kullanılan belirli bir program yapısı vardır. Nesnelerin oluşturulması ve silinmesi, adı verilen özel yöntemler kullanılarak gerçekleştirilir.sırasıyla yapıcılar ve yıkıcılar.

İnşaatçı class, nesneleri oluşturur ve başlatır ve ayrıca sanal işlevleri kullanmak için gereken geç bağlama mekanizmasını hazırlayabilir.Yıkıcı sınıfı, nesneyle çalışmayı tamamlayan eylemler gerçekleştirir, örneğin: yığın belleğini boşaltır, ekranı geri yükler, dosya değişkenlerini kapatır.

Nesnelerin ve mesajların etkileşimi.

Özelliklerin yakınlığı veya dahil edilmesi ilişkisi, sınıflar arasındaki birçok ilişki türünden yalnızca biridir. Sınıflar ve nesneler arasındaki bir diğer önemli ilişki türü, etkileşim ilişkisi veya istemci-sunucu ilişkisidir. İlişki ilişkileri ayrıca kapsülleme özelliği ile sınırlı belirli bir etkileşim ilişkisini de ifade eder.

Kapsülleme sayesinde, nesneler birbirlerinden o kadar iyi izole edilmiştir ki, programdaki etkileşim mekanizmalarına özel dikkat gösterilmesi gerekir. Bu, bağımsız nesneler için geçerlidir, bu nesnelerin veri öğeleri olarak diğer nesnelere daldırılanlar için geçerli değildir. Ancak ikinci durumda bile etkileşim, veri öğelerinin görünürlüğü (erişilebilirliği) ve ilgili nesnelerin ve kapsüllenmiş nesnelerin yöntemleriyle ilgili anlaşmalarla sınırlandırılabilir. Bu nedenle, genişletmek için buna özel dikkat göstermelisiniz.

İletişim genellikle kullanılarak kurulurişaretçiler bu, programın bir yığın veri yapısı gibi görünmesini sağlar. Programın ana içeriği, sınıfların açıklaması ve etkileşim halindeki bir dizi nesnedir. Sınıf kitaplıkları, bir nesneye (kendi içinde) erişmek için ayrılmış bir sözcük kullanırbu, hangi bağlamda kullanıldığı nesnenin adı ile eşanlamlıdır.

Nesneler arasında bilgi alışverişi yapmanın ikinci yolu,küresel değişken(mesaj tamponu) bir nesnenin bir değer atadığı ve diğerinin okuduğu. Bu yöntemin uygulanması kolaydır, ancak etkileşim yapısı programcıdan ilk yönteme göre daha gizlendiğinden, programcı tarafında mesaj alışverişinin dikkatli bir şekilde kontrol edilmesini gerektirir.

8.3. Nesne yönelimli programlamanın aşamaları.

Belirli bir görevi çözen bir program, bu görevle veya belirli bir konu alanıyla ilgili dünyanın bir kısmının açıklamasını içerir. Görünüşe göre, gerçekliğin etkileşimli nesneler biçiminde tanımlanması, bir alt yordamlar hiyerarşisi biçiminden daha doğaldır ve bu nedenle belirli bir konu alanında yazılım modellemesini kolaylaştırır.

İçinde programlama sırasındanesne yönelimli stil aşağıdaki aşamalar ayırt edilebilir:

  1. Konu alanının temel kavramlarının ve belirli özelliklere sahip karşılık gelen sınıfların tanımı (olası durumlar ve eylemler). Nesne oluşturmak için seçeneklerin gerekçesi.
  2. Bir yazılım sistemi içinde sınıfların etkileşimi ve nesnelerin etkileşimi ilkelerinin belirlenmesi veya formülasyonu.
  3. İlgili sınıfların özellikleri arasında bir ilişki hiyerarşisi oluşturmak.
  4. Kapsülleme, kalıtım ve çok biçimlilik mekanizmalarını kullanarak bir sınıf hiyerarşisi uygulama.
  5. Her sınıf için, nesne özelliklerini yönetmek için eksiksiz bir yöntem seti uygulanır.

Bu yaratacaknesne yönelimli ortam veya belirli bir alandaki modelleme problemlerini çözmenize izin veren bir sınıf kitaplığı.

İlk üç aşamanesneye yönelik analiz konu alanı.

OOP aşağıdakilere sahiptiravantajları:

Günlük yaşamdan veya konu alanından daha doğal kavramlar ve isimler kullanmak;

Eskilere dayalı yeni konseptler sunma kolaylığı;

Simüle edilen etki alanının nesneleri arasındaki en yaygın özelliklerin ve ilişkilerin sınıf kitaplığında görüntüleyin;

Program nesnelerinin uzayında çözülen problemin uzayının doğal haritalanması;

Sınıflarda, nesnelerde ve bir bütün olarak programda değişiklik yapma kolaylığı;

Sınıf polimorfizmi, programların yazılmasını ve anlaşılmasını kolaylaştırır;

Kapsülleme ve erişim kontrolüne dayalı özelliklerin ve davranışların yerelleştirilmesi, programın yapısını anlamayı ve hata ayıklamayı kolaylaştırır;

Nesne kurucularında parametrelerin aktarılması, oluşturulan yazılım sistemlerinin esnekliğini artırır.

Dezavantajlar olarak OOP şu şekilde not edilebilir:

Özellikle sanal yöntemler kullanılırken programların düşük performansı;

Bir sınıf kitaplığı geliştirmek çok zaman alıyor, bu nedenle OOPamaca uygun olarak küçük birim programları yazarken değil, büyük programlar oluştururken;

Temel sınıfların özelliklerini doğru şekilde kullanmak için tüm sınıf hiyerarşisini analiz etme ihtiyacı.

Belirli bir yazılım sistemi oluşturmak için OOP teknolojisini kullanmanın fizibilitesi belirleniriki ana faktör:

Konu alanının özellikleri ve çözülen uygulanan problem;

Kullanılan programlama dilinin özellikleri (çevirmen).

Konu alanı, OOP teknolojisinin kullanımı için aşağı yukarı geliştirilebilir. Gelişmiş alanlarda sınıflar, hiyerarşileri ve etkileşim ilişkileri açıktır. Gelişmemiş alanlarda, OOP kullanımı, geliştirmenin ilk aşamalarında (nesneye yönelik analiz, bir sınıf kitaplığının tasarımı ve oluşturulması) çok daha yüksek maliyetleri içerir.

Hız ve bellek tüketimi açısından program kodunun maksimum veriminin gerekli olduğu alanlar bilinmektedir (gerçek zamanlı sistemler, minyatür araçlar). Bu tür alanlarda, OOP kullanımı, ya yazılım geliştirme maliyetindeki bir düşüşle ya da üretilen program kodunun tatmin edici bir kalitesiyle gerekçelendirilebilir.

İyi çalışmanızı bilgi tabanına göndermek basittir. Aşağıdaki formu kullanın

Bilgi tabanını çalışmalarında ve çalışmalarında kullanan öğrenciler, yüksek lisans öğrencileri, genç bilim adamları size çok minnettar olacaklar.

Yayınlanan http://www.allbest.ru/

Kurs çalışması

Tasarım ve programlamaya yönelik modüler, yapısal ve objektif yaklaşımlar

Giriş

2.1.2 Yapısal yaklaşım

2.2.2 Modüler yaklaşım

Sonuç

programlama kontrol tasarımı

Giriş

Programlama nispeten genç ve hızla gelişen bir bilim ve teknoloji dalıdır. Gerçek geliştirmeler yapma ve mevcut yazılım ve donanımı iyileştirme deneyimi sürekli olarak yeniden düşünülmekte ve sonuçta yeni yöntemler, metodolojiler ve teknolojiler ortaya çıkmakta ve bu da daha modern yazılım geliştirme araçlarının temelini oluşturmaktadır. Yeni teknolojiler oluşturma süreçlerini incelemek ve ana eğilimlerini belirlemek, bu teknolojileri programlama geliştirme seviyesi ve programcıların kullanabileceği yazılım ve donanım araçlarının özellikleri ile karşılaştırmak tavsiye edilir.

Programlama teknolojileri, bilgi fonları, proje prosedürlerinin açıklamaları ve proje operasyonları ile teknikler şeklinde sunulan programları oluşturmak için kanıtlanmış stratejilerdir. Yapılandırılmış programlama teknolojisi, rasyonel veri yapısına sahip program tasarım teknolojisi, nesne yönelimli programlama teknolojisi, görsel programlama teknolojisi bulunmaktadır.

Bu teknolojilerin her biri bir veya daha fazla programlama paradigması (kavramlar, inanç sistemleri) kullanır. İkincisi, program yazmak için farklı yaklaşımları temsil eder. Her biri şunları gerektirir: kendi düşünme türü, özel bir öğrenme okulu, kullanılan dil tarafından belirlenen programlama teknikleri ve yöntemleri.

Bu arada yazılımın evrimi, bilgisayarların evrimi, evrim yasalarının, hiyerarşi yasalarının en açık şekilde bu alanda ortaya çıktığını açıkça göstermektedir. Önceki nesil programcılar, programlamayı doğrudan programlamadan öğrendiler. Programcılar soyut kategorilerde (makine ikili dosyaları) düşünüyorlardı. Kullanıcı, sorunu çözme yolunu (yolunu) bilmeden sonucu aldı. Yapısal (modüler) programlama yolunda başlangıçta çıkmazdan bir çıkış yolu bulundu, burada görev daha sonra bir veya başka bir programın oluşturulduğu bloklara (modüllere) bölündü. Tuğlalardan olduğu gibi başka programların yapıldığı standart program kitaplıkları oluşturuldu. Burada, sonsuz sayıda uzamsal "görüntünün" belirli bir standart tuğla setine yansıtıldığı, tamamen yeni bir mekanizma (programlamada ama matematikte ve diğer bilimlerde değil) ortaya çıkmaya başladı. Programın belirli bir "görüntüsünün" ağacından belirli bir dizi belirli temel öğe kullanılarak sıralı geçiş, belirli bir sonuca yol açtı. Programlamada, yetenekleriyle belki de sadece insan beyniyle karşılaştırılabilecek doğal bir mekanizma gelişmeye başladı. Aynı zamanda, aynı tuğlalar sadece bir görüntü çerçevesinde değil, aynı zamanda başka bilgisayar görüntüleri oluştururken de birçok kez kullanılabilir. Tuğlaların kendisi de belirli "imgelerin" yapraklarıydı. Aynı zamanda, görüntülerle ağaçlardan oluşan ağ ne kadar karmaşıksa, "benzer" görüntüleri bulma ve tanımlama yeteneği o kadar güçlü olacak, bilgisayarın sahip olacağı "entelektüel" yetenekler de o kadar fazla olacaktır.

Bu nedenle, bilgi işlemdeki ilerleme, her şeyden önce, insanın, onu bilmeden, hiyerarşik sistemleri organize etmenin en uygun yolunu doğadan kopyaladığı gerçeğinden kaynaklanmaktadır. Çalışmanın amacı, programları oluşturmak için çeşitli stratejileri, yöntemlerini, avantajlarını ve dezavantajlarını (Pascal dilinde programlama örneğini kullanarak) düşünmektir. Araştırmanın amacı, program oluşturma stratejisidir. Bu hedefe ulaşmak için aşağıdaki görevleri çözmek gerekir:

Farklı programlama ve tasarım yaklaşımlarını düşünün;

Uygulanan bir görevi uygularken yaklaşımların her birini uygulayın.

1. Teknolojiler ve programlama paradigmaları

1.1 Programlama paradigmasının evrimi

Hiyerarşi yasalarının fikirlerinin zaferinin en açık örneklerinden biri, bilgisayar teknolojisinin ve her şeyden önce bilgisayar yazılımının evrimidir.

Bilgisayar yazılımı, donanımdan daha sonra ortaya çıktı. Donanımın karmaşıklığı arttıkça, yazılımın yetenekleri de arttı. Derleyiciler, derleyiciler, işletim sistemleri ve veritabanı yönetim sistemleri oluşturuldu. Hesaplamayla ilgili bir dizi disiplin, örneğin matematiksel mantık, dilbilim, otomata teorisi vb. Matematiğe dayanmasına rağmen, çoğu uzmanın hala teorikten daha pragmatik bir yazılım geliştirme yaklaşımı var ve hala var.

Günümüz programlama yöntemlerinin çoğunu tanımlayan dört ana paradigma vardır: zorunlu, uygulama, kural tabanlı ve nesne yönelimli.

Zorunlu paradigma (yapısal, modüler yaklaşımın temelini oluşturur). Bu model, talimatları (komutları) sıralı olarak yürüten standart bir bilgisayarın donanımının özelliklerinden kaynaklanmaktadır. Algoritmalar, bu paradigmada kullanılan ana soyutlama türüdür. Operatör odaklı birçok programlama dili bu temelde geliştirilmiştir. Böyle bir dildeki bir program, her birinin yürütülmesi bir veya daha fazla bellek hücresindeki değerde bir değişiklik gerektiren bir dizi ifadeden oluşur. Genel olarak, böyle bir dilin sözdizimi şöyledir:

Operator_1:

Operator_2:

Genellikle, programlama kavramlarını ilk öğrendiğinizde, bu modelle karşılaşırsınız ve birçok yaygın dil onu destekler (örneğin, C, C ++, FORTRAN, ALGOL, PL / I, Pascal, Ada, Smalltalk ve COBOL).

Uygulama paradigması. Bir programlama dili kullanarak hesaplamalara bakmanın farklı bir yoludur. Bu paradigma, programın gerçekleştirdiği işlevin dikkate alınmasına dayanmaktadır. Bilgisayarın geçmesi gereken durumların sırası burada dikkate alınmaz. Soru farklı bir şekilde sorulmaktadır: İstenen sonucu elde etmek için makinenin başlangıç \u200b\u200bdurumuna hangi işlevin uygulanması gerekir (bir başlangıç \u200b\u200bdeğişken kümesi seçerek ve bunları belirli bir şekilde birleştirerek)?

Bu özel hesaplama görüşünün vurgulandığı diller, uygulamalı veya işlevsel diller olarak adlandırılır. Böyle bir dilin sözdizimi genellikle şu şekildedir:

İşlev_n (... işlev_2 (işlev_1 (veri)) ...)

Böyle bir model, ML ve LISP gibi diller tarafından desteklenmektedir.

Kural tabanlı bir paradigma. Bu paradigmaya dayalı diller, gerekli izin verme koşulunun varlığını kontrol eder ve bulunursa uygun eylemi gerçekleştirir. En ünlü kural tabanlı dil Prolog'dur. Mantıksal programlama dili olarak da adlandırılır.

Bir programı böyle bir dilde çalıştırmak, zorunlu bir dilde yazılmış bir programı çalıştırmaya benzer. Ancak ifadeler, programda tanımlandıkları sırayla yürütülmez. Yürütme sırası, izin şartlarına göre belirlenir. Bu tür diller için sözdizimi aşağıdaki gibidir:

koşul_1'i etkinleştir -\u003e eylem_1 koşul_2'yi etkinleştir -\u003e eylem__2

izin verilen koşul_n -\u003e eylem _n

Bazen kurallar, gerçekleştirilen eylemin sola yazılmasıyla "eylem koşullara izin veriyorsa" şeklinde yazılır.

Nesne yönelimli paradigma (nesne yaklaşımının merkezinde). Bu modelde karmaşık veri nesneleri oluşturulmuştur. Bunlarla ilgili işlemler için, belirli sınırlı yöntemler tanımlanmıştır. Oluşturulan nesneler, daha basit nesnelerin özelliklerini devralabilir. Bu yetenek sayesinde, nesne yönelimli programlar, zorunlu dillerde yazılan programların doğasında bulunan yüksek verimliliğe sahiptir. Sınırlı bir veri nesneleri kümesi kullanan farklı sınıflar geliştirme yeteneği, uygulama dilinin doğasında bulunan esnekliği ve sağlamlığı ortaya çıkarır.

Farklı problemleri çözme ihtiyacıyla açıklanan başka paradigmalar da var. Pratik uygulamanın tüm alanlarında hiçbir paradigma en iyisi olarak kabul edilemez. Örneğin, zorunlu paradigma hesaplama problemleri için daha uygundur ve kurala dayalı paradigma, akıllı sistemlerin tasarımı için kullanılır. Son yıllarda, görsel programlama paradigması özel bir popülerlik kazanmıştır.

1.2 Kontrol yapıları ve alt yordamları

Birincil programlar teorisi, blok diyagramlarının kesin bir hiyerarşik ayrışımını tanımlamak için yapılandırılmış programlama metodolojisinin bir genellemesi olarak Maddux tarafından önerildi. Bu teori, program grafiklerinin üç sınıf düğüm içerebileceğini varsayar (Şekil 1):

a) fonksiyonel düğümler - program tarafından gerçekleştirilen hesaplamaları temsil eder ve bu düğüme bir yay girerken ve bir giden bir yay ile dikdörtgenler ile gösterilir. İşlevsel düğümler, yürütülmesi sanal makinenin durumunda bir değişikliğe neden olan atama ifadelerini temsil eder;

b) karar verme düğümleri - bir gelen darbe ve iki giden (doğru ve yanlış) olan eşkenar dörtgen şeklinde tasvir edilmiştir. Bu düğümler tahminleri temsil eder ve karar düğümünden gelen kontrol ya doğru ya da yanlış dal boyunca aktarılır;

c) bağlantı düğümü - iki grafik yayının bir çıkış yayı oluşturmak üzere birleştiği bir nokta olarak temsil edilir.

Şekil 1 Bir program grafiğindeki düğümler

Herhangi bir blok diyagram yalnızca bu üç bileşenden oluşur.

Doğru bir program, bir kontrol yapısının belirli bir biçimsel modeli olan ve aşağıdakilere sahip olan bir blok diyagramdır: bir gelen yay; giden bir yay; gelen bir yaydan herhangi bir düğüme ve herhangi bir düğümden giden bir yaya giden bir yol.

Birincil program, daha küçük, doğru programlara bölünemeyen doğru bir programdır. Bu kuralın bir istisnası, bir birincil program olarak kabul edilen bir dizi işlevsel birimlerdir.

2. Tasarım ve programlamaya yönelik yaklaşımların evrimi

2.1 Tasarım ve programlamaya yapısal bir yaklaşım

2.1.1 Yapısal programlama kavramı

Tarihsel olarak, zorunlu diller bugün programlamaya hâkim olmuştur. Bununla birlikte, XX yüzyılın 70'li ve 80'li yıllarında yapılan araştırmalar, uygulama tekniğinin programları doğrulamak ve doğruluğunu kanıtlamak için daha verimli yollar sağladığını göstermiştir. Bu, Şekil 2'de gösterilen blok diyagramdan görülebilir.

Şekil 2 60'lı yıllara ait bir programın tipik akış şeması

Geçen yüzyılın 60'ları, "kendiliğinden" programlama dönemi olarak nitelendirilir. Bu dönemde, program yapısı, veri türleri vb. Kavramı yoktu. Sonuç olarak, kod kafa karıştırıcı ve çelişkiliydi. O yıllarda programlama bir sanat olarak kabul edildi. 60'ların sonu - programlamada bir kriz.

Bu krizden çıkmanın yolu yapısal bir programlama paradigmasına geçiştir. Şekil 2, 60'ların programlarına özgü bir blok diyagramını göstermektedir. İçinde açık bir yapı yok. Bu tür programlara spagetti programları denir. İleri ve geri çok sayıda irrasyonel kontrol aktarımı nedeniyle, programın yürütülmesi sırasında her an programın durumunun ne olduğunu anlamak zordur.

Şekil 3, daha yapılandırılmış bir tasarımı göstermektedir. Bu akış şemasının her bölümü noktalı bir dikdörtgen içine alınabilir. Bu diyagramdaki bu dikdörtgenlerin her birinin bir giriş noktası ve bir çıkış noktası olacaktır. Bu program, dört alt yordam işlevinin bir bileşimi olarak görülebilir ve programın davranışı, noktalı dikdörtgenin girişinde belirli bir durumu alan ve onu çıkışında ortaya çıkan duruma dönüştüren bir işlev olarak tanımlanabilir. Binlerce ve onbinlerce satırda karmaşık programları bağımsız parçalara ayırmadan yazın, örn. Yapılandırma olmadan bu imkansızdır.

Yapısal programlama, bir programdaki kontrolü aktarmak için yalnızca üç yapının kullanıldığı, sıralı, koşullu ve yinelemeli kontrol transferlerine izin veren bir yaklaşımdır.

Bu durumda, örneğin goto ifadesiyle koşulsuz kontrol devri yasaktır.

Sonuç olarak, programdaki sıralı, koşullu ve döngüsel ifadelerin bir kombinasyonu olan her karmaşık komut, yalnızca bir giriş noktasına ve bir çıkış noktasına sahiptir, bu da programı nispeten bağımsız parçalara bölmeyi mümkün kılar.

Şekil 3 Yapılandırılmış bir tasarım programının blok diyagramı

Yapısal programlama, uygulama tekniklerinin zorunlu programlara uygulanmasının sonucudur. Bunun için, bir programı bir dizi prosedür olarak tanımlamanın mümkün olduğu prosedür yönelimli diller kullanılır. Prosedürler birbirini çağırabilir ve her biri bir prosedür olarak da düşünülebilecek ana program tarafından çağrılabilir.

2.1.2 Yapısal yaklaşım

Programlamaya yapısal yaklaşım, yazılım geliştirmenin tüm aşamalarının uygulanmasını kapsayan bir dizi önerilen teknolojik tekniktir. Uygulaması şunları sağlar:

a) programları yazarken ve kontrol ederken programcıların üretkenliğini artırmak;

b) ayrı modüllerden oluştukları için bakım için daha uygun programlar elde etmek;

c) geliştiricilerden oluşan bir ekip tarafından programların oluşturulması;

d) belirli bir zamanda programların oluşturulmasının tamamlanması.

Yapılandırılmış programlarda, temel algoritmanın izlenmesi genellikle kolaydır, hata ayıklamaları daha kolaydır ve programlama hatalarına daha az duyarlıdırlar. Bu özellikler, her biri birçok yönden programın bağımsız bir parçası olan ve yalnızca birkaç parametre aracılığıyla ana programla ilişkilendirilen alt yordamların önemli bir özelliğinin bir sonucudur. Alt yordamların bu türden bağımsız olması, içlerinde bir veya başka bir algoritmik eylemin yazılım uygulamasının tüm ayrıntılarını yerelleştirmeye izin verir ve bu nedenle, örneğin hata ayıklama sırasında bu ayrıntıları değiştirmek, genellikle ana programda değişikliklere yol açmaz.

Yapısal programlama kavramı, programı bilgi gizleme ilkesine göre ayrı bileşenlere ayırmayı ifade eder.

Bilgi gizleme ilkesi, yerel nesnelerin tanımlayıcılarının (değişken kayıtlardaki sabitlerin, türlerin, değişkenlerin, prosedürlerin, işlevlerin, etiketlerin ve alanların adları), yani yalnızca belirli bir talimat dizisi içinde kullanılanların dışarıda bir anlam ifade etmemesidir. bu talimatlar.

Prosedürler ve işlevler, yerel tanımlayıcıların varoluş kapsamının sınırlı olduğu doğal metin birimleri olarak hareket eder.

Tanımlayıcı, tanımlama veya isimlendirme için kullanılan bir karakter dizisidir (bir harf veya alt çizgiyle başlayan ve boşluk içermeyen bir harf, sayı ve alt çizgi dizisi).

Bir tanımlayıcının kapsamı (eylemi), programın kullanılabileceği kısımdır.

Tanımlayıcıların kapsamı, bildirildikleri yere göre belirlenir. Tanımlayıcıların yalnızca bir prosedür veya işlev içinde kullanılmasına izin verilirse, bu tür tanımlayıcılar yerel olarak adlandırılır. Tanımlayıcıların eylemi birkaç iç içe (en az bir) prosedür ve / veya işlevi kapsıyorsa, bu tür tanımlayıcılar global olarak adlandırılır. Tanımlayıcılar için kapsam belirleme kuralları aşağıdaki gibidir:

a) prosedür / işlev içinde tanımlanan tüm tanımlayıcılar geçerlidir;

b) çevreleyen bağlamın tüm tanımlayıcıları, isimleri prosedür / işlev içinde bildirilen adlardan farklıysa geçerlidir;

c) dış ortamdaki yerel prosedür / işlev tanımlayıcıları asla çalışmaz;

d) global ve yerel tanımlayıcıların isimleri çakışırsa, aynı türde olup olmadıklarına bakılmaksızın sadece dahili, yerel tanımlayıcı geçerlidir.

2.1.3 Yapısal tasarım teknikleri

Bir algoritma da dahil olmak üzere herhangi bir ürünü ilk aşamalarda tasarlarken, ana dikkat en önemli sorunlara verilir ve birçok özel ayrıntı yapay olarak göz ardı edilir. Bu nedenle, en genel tasarım taktiği, süreci ayrı eylemlere ayırmaktır. Yapısal yaklaşım, ayrı küçük alt programlar biçiminde müteakip uygulama amacıyla karmaşık sistemlerin ayrıştırılmasına (parçalara bölünmesine) dayanmaktadır. Diğer ayrıştırma ilkelerinin (nesne, mantıksal vb.) Ortaya çıkmasıyla, bu yönteme prosedürel ayrıştırma adı verildi. Ayrıştırmanın bu tür her adımında, şunlardan emin olmanız gerekir:

a) belirli sorunların çözümleri genel bir sorunun çözümüne götürür;

b) bu \u200b\u200bbireysel eylemler dizisi en rasyoneldir;

c) gerçekleştirilen ayrıştırma, programın daha sonra yazılacağı dile en yakın anlamdaki talimatları almanıza olanak tanır.

Yazılım sistemlerini tasarlamak için yukarıdan aşağıya yaklaşım. Bu yönteme göre programın oluşturulması yukarıdan başlar yani en önemli, genel algoritmanın geliştirilmesi ile. En üst düzeyde, programın bir veya daha fazla bölümünün uygulanmasına ilişkin ayrıntılar genellikle henüz net olmadığından, bu bölümler geçici saplamalarla değiştirilmelidir.

Bitmemiş bir programı çalıştırmak (saplamaları gerçekten çalışma prosedürleriyle değiştirmeden önce), daha düşük seviyeli algoritmalar geliştirmeden ve uygulamadan önce biraz güven sağlar. Saplamada uygulanan algoritma yeterince karmaşıksa, ana algoritma izole edilerek ve yeni saplamalar uygulanarak vb. Yeniden yapılandırılır. (Saplama, bir programda geçici olarak kullanılan bir yedek bileşendir, böylece geliştirmeye devam edebilirsiniz, yani bu bileşenin uygun biçimde yapıldığı zamana kadar derleme veya test etme). Süreç, programın tamamen işlevsel bir sürümü oluşturulana kadar devam eder.

Uygulamada, saf yukarıdan aşağıya geliştirme imkansızdır. Sonraki aşamalardan birinde, genellikle daha önce yapılan bazı seçimlerin yetersiz olduğu ve bu durumun yinelemeli geliştirme ihtiyacına yol açtığı görülür.

Yazılım geliştirmeye aşağıdan yukarıya bir yaklaşım. Bu durumda, program, seçilen programlama dili tarafından sağlanan ilkellerden başlayarak sıralı olarak mevcut öğelerden oluşturulur. Bu süreç, gerekli bitmiş programın alınmasıyla sona erer. Her aşamada, mevcut unsurlardan daha güçlü unsurlar oluşturulur. Bu öğeler, bir sonraki adımda daha güçlü öğeler oluşturmak için kullanılacak ve bu, gerekli programı doğrudan oluşturabileceğiniz öğeler elde edilene kadar devam edecek.

Uygulamada, saf haliyle aşağıdan yukarıya gelişme ve yukarıdan aşağıya gelişme imkansızdır. Geliştirilen programın gereksinimlerini karşılayıp karşılamadığını kontrol etmek için her yeni öğenin inşasına ileriye dönük bir bakış eşlik etmelidir; ancak bu yaklaşımla bile, genellikle daha sonraki bir aşamada daha önce kullanılan yapı sırasının yanlış seçildiği ve yeni bir yinelemenin gerekli olduğu görülür.

Yeni algoritmalar tasarlarken, genellikle yukarıdan aşağıya yaklaşım hakimdir. Programları biraz değişen gereksinimlere uyarlarken, genellikle aşağıdan yukarıya yaklaşım tercih edilir. Bu yöntemlerin her ikisi de yapılandırılmış programlar geliştirmenize izin verir.

Yapısal tasarım ilkelerine yönelik destek, sözde prosedürel programlama dillerinin temelini oluşturuyordu. Tipik olarak, temel "yapılandırılmış" kontrol aktarım ifadelerini, desteklenen alt rutin yerleştirmeyi, yerelleştirmeyi ve veri "kapsamını" içerirler. Bu grubun en ünlü dilleri arasında PL / 1, ALGOL-68, Pascal, С.

Geliştirilmekte olan yazılımın karmaşıklığında ve boyutunda daha fazla büyüme, veri yapılandırmasının geliştirilmesini gerektirdi. Sonuç olarak, dillerin özel veri türlerini tanımlaması mümkün hale gelir. Aynı zamanda, global verilerle çalışırken oluşan hataların sayısını azaltmak için programın global verilerine erişimi sınırlandırma isteği artmıştır. Sonuç olarak, modüler bir programlama teknolojisi ortaya çıktı ve gelişmeye başladı.

2.2 Tasarım ve programlamaya modüler yaklaşım

2.2.1 Modüler programlama kavramı

Modüler programlama, bir programın, yapısı ve davranışı önceden belirlenmiş kurallara uyan küçük bağımsız bloklar (modüller) topluluğu olarak düzenlenmesidir.

Bir modül (modüler programlamada), bu alt rutinlerin işlediği verilerle birlikte birbirine bağlı bir dizi alt yordamdır (prosedürler).

Modüler programlama, büyük programlar geliştirmek içindir. Büyük programların geliştirilmesinde bir programcı ekibi yer alır. Her programcı, programın bazı bağımsız bölümlerinin geliştirilmesinden sorumludur. Ve bu durumda, bu prosedürler için gerekli tüm prosedürleri ve verileri oluşturmaktan sorumludur. Verilerin gizlenmesi (modülün dışından verilere erişimin engellenmesi) yanlışlıkla değiştirilmesini ve buna bağlı olarak programın bozulmasını önler. Programın tek tek parçalarının (modüllerin) etkileşimi için, programcı ekibinin yalnızca ana programdaki tasarlanan modüllerin arayüzü (etkileşim) üzerinde düşünmesi gerekir.

Pascal dili açısından modül yapısı.

Birim, metni bağımsız olarak (özerk olarak) derlenen bir program birimidir.

Modül 4 bölüm içerir: başlık, ön uç (bildirim bölümü), uygulama bölümü ve başlatma bölümü.

BİRİM<имя модуля>; (Başlık)

INTERFACE (arayüz bölümü)

Kullanımlar<используемые модули>;

Const<объявления глобальных констант>;

Tür<объявления глобальных типов>;

Var<описание глобальных переменных>;

Prosedür<заголовки(!) доступных процедур>;

Fonksiyon<заголовки(!) доступных функций>;

UYGULAMA (uygulama bölümü)

Kullanımlar<используемые при реализации модули>;

Const<объявления скрытых (локальных) констант>;

Tür<объявления скрытых (локальных) типов>;

Var<описание скрытых (локальных) переменных>;

Prosedür<тела(!) скрытых (локальных) процедур>;

Fonksiyon<тела(!) скрытых (локальных) функций>;

<основной блок модуля = раздел инициализации>

2.2.2 Modüler yaklaşım

Modüler bir yaklaşım kavramı, birkaç kavram ve hüküm şeklinde formüle edilebilir:

a) büyük görevler bir dizi daha küçük, işlevsel olarak bağımsız alt görevlere - yalnızca giriş ve çıkış verileriyle birbirine bağlanan modüller - bölünmüştür;

b) modül, bir girişi ve bir çıkışı olan bir "kara kutu" dur. Bu, programı çalışması sırasında sorunsuz bir şekilde modernize etmenize, bakımını kolaylaştırmanıza ve ayrıca bir yazılım projesinin parçalarını farklı programlama dillerinde geliştirmenize olanak tanır;

c) her modülde net hedefler gerçekleştirilmelidir. Modülün amacı net değilse, bu, modüllere ayrıştırmanın yeterince iyi yapılmadığı anlamına gelir. Ayrıştırma işlemi, tüm modüllerin amacının ve bunların optimum kombinasyonunun net bir şekilde anlaşılmasına kadar devam etmelidir;

d) modülün kaynak metni, modülün amacını ve tüm dış bağlantılarını yansıtan bir başlığa ve bir arayüz kısmına sahip olmalıdır;

e) Program modüllerinin geliştirilmesi sırasında, verilerdeki veya kullanıcı eylemlerindeki olası hatalara yanıtları dikkate alan özel işlem blokları sağlanmalıdır.

Modüler bir yaklaşım kavramında, bir veya birkaç büyük sorunu birlikte çözen program modülleri arasındaki kontrol ve bilgi bağlantılarının organizasyonuna büyük önem verilmektedir.

Modüllerle çalışırken, prosedürlerden ve işlevlerden temel farklarını hatırlamanız gerekir. Modüller için global ve yerel değişkenlerin kapsamını belirlemeye yönelik geleneksel kurallar çalışmıyor. Bu dil yapısı, ana programda bildirilen global değişkenlerin dahili modül açıklamaları üzerindeki etkisini dışlamak için tasarlanmıştır. Bu nedenle, programın tüm blokları için mevcut genel tanımların girilmesi gerekli hale gelirse, bir global bildirimler modülü oluşturulmalı ve açıklamalarının gerekli olduğu tüm modüllerin ithalleri listesine dahil edilmelidir.

Modüler tasarım, aynı genel verileri kullanan alt yordam gruplarını ayrı olarak derlenmiş modüllere (alt yordam kitaplıkları), örneğin bir grafik kaynak modülüne ayırmayı içerir. Bu teknolojiyi kullanırken, modüller arasındaki bağlantılar özel bir arayüz aracılığıyla gerçekleştirilirken, modülün uygulanmasına (alt rutin gövdeleri ve bazı "dahili" değişkenler) erişim yasaklanmıştır. Bu teknoloji, Pascal ve C (C ++) dillerinin, Ada ve Modula dillerinin modern sürümleri tarafından desteklenmektedir.

2.3 Tasarım ve programlamaya nesne yaklaşımı

1 Nesneye Yönelik Programlama

Nesneye yönelik programlama, bir programı nesneler koleksiyonu olarak temsil etmeye dayanan karmaşık bir yazılım oluşturma teknolojisi olarak tanımlanır (bir nesne, durum değişkenleri ve ilgili yöntemler koleksiyonudur; yöntemler, bir nesnenin dış dünyayla nasıl etkileşime girdiğini belirler; nesne yöntemleri prosedürler ve işlevler olarak anlaşılır. , her biri belirli bir sınıfın (tür) bir örneği olan ve sınıflar özelliklerin mirası ile bir hiyerarşi oluşturan nesne açıklamasına dahil edilen). Böyle bir sistemde yazılım nesnelerinin etkileşimi mesajlar geçerek gerçekleştirilir.

Nesneye yönelik programlamanın modüler programlamaya kıyasla temel avantajı, geliştirilmesini büyük ölçüde kolaylaştıran "daha doğal" yazılım ayrıştırmasıdır. Bu, verilerin daha eksiksiz bir şekilde yerelleştirilmesine ve bunların, programın tek tek parçalarının (nesnelerinin) neredeyse bağımsız olarak geliştirilmesine izin veren işlem rutinleri ile entegrasyonuna yol açar.

Mantıksal birim olarak bir nesne, ayrı bir bellek alanında aşağıdaki verileri ve işlemleri (bir algoritma kodlu yöntemler) içerir:

a) değerleri nesnenin mevcut durumunu belirleyen nesne alanları (veya kaynak veri öznitelikleri);

b) adanmış bir mesaj biçiminde çağrılarına yanıt olarak eylemler (algoritmaların yürütülmesi) uygulayan nesnenin yöntemleri;

c) özellikler - nesnenin davranışını, yani dış etkilere tepkisini belirleyen yöntemlerin bir kısmı.

Sınıfları bildirirken, yukarıda açıklanan nesnelerin üç özelliği tanımlanır: alanlar, yöntemler ve özellikler ve bu sınıfın atası da belirtilir.

Programlardaki nesneler, gerçek dünyanın tüm fenomenlerini yeniden üretir: "doğar" ve "ölür"; durumlarını değiştirmek; süreçleri başlatmak ve durdurmak; Diğer nesneleri “öldürün” ve “canlandırın”.

2.3.2 Nesne Yönelimli Tasarım

Nesne yönelimli tasarım, nesne ayrıştırma sürecini ve sistemin mantıksal (sınıflar ve nesneler) ve fiziksel yapısını (süreçler ve bileşenlere, dosyalara veya modüllere bölünme) ve statik ve dinamik yönlerini yansıtan modelleri temsil etme tekniklerini birleştiren bir tasarım metodolojisidir. ...

Nesne yönelimli paradigma, üst düzey bir paradigma haline geliyor ve gerçekliği modelleme, bu alanlardaki uzmanların dilinde konu alanlarının modellerini oluşturma ile uğraşırken yapılandırılmış programlama paradigmasının ilkelerine hakim oluyor. Değiştirmesi kolay, genişletmesi, açık arayüzlerin ve bağımsız modüllerin olduğu iyi bir program yazmak için bunu ihmal ederseniz, bu, yapılandırılmış programlama paradigması seviyesine geri dönüş anlamına gelecektir. Program herkese iyi gelecek ama onu anlamak mümkün olmayacak, gerçeğe uymayacağı için sadece programcının bildiği terimlerle anlatılacak ve konu alanını bilen bir uzman yardım almadan programı anlayamayacaktır. Sonunda, iyi bir program düzenlenmiş ancak bir model olmamasına rağmen, zorluk çok dar bir aralıkta azalacaktır. Bir modelin yokluğu ya da sadece yüzeysel bir temsili, iyi bir programı içeriden "havaya uçuracak" ve gelecekte daha fazla gelişmeye ve ona eşlik etmesine izin vermeyecektir.

Sınıflar ortaya çıktığında, soyutlamaları olmayan, bu sınıflar tamamen sistematik olduklarında ve konu alanıyla hiçbir ilgisi olmadığında, yalnızca diğer sınıfların etkileşim akışlarını basitleştirmek için tanıtıldıklarında - yazılım "sakallı" hale gelir ve eğer yeniden düzenleme bunu takip etmezse siteler bir noktada, yazılım geliştirme duracak ve imkansız hale gelecektir.

Nesneye yönelik bir yaklaşımla yazılım ve teknik sistemler tasarlamak, belirli bir seviyedeki hiçbir alt sistemin bu seviyedeki diğer herhangi bir alt sistemin cihazına bağlı olmaması koşuluna dayanır. Bir nesnenin iç yapısının diğerinin iç yapısından bu bağımsızlığına kapsülleme denir.

Kapsülleme ilkesi, modüler programlama teknolojisinde kullanılmıştır. Modül, kapsüllemeyi arayüz ve uygulama bölümlerine bölerek açıkça sunar.

Nesne yönelimli programlamada, kapsülleme ilkesi, bir sınıfı belirli bir görev için kendi kendine yeterli hale getirmek için programın geri kalanından ayırmak için kullanılır. Örneğin, Delphi ortamındaki TForm sınıfı, bir Windows penceresi oluşturmak için ihtiyacınız olan her şeyi içerir (kapsüller), TMemo sınıfı tam özellikli bir metin düzenleyicidir, TTimer sınıfı bir zamanlayıcıya sahip bir program vb. Sağlar.

Kapsülleme, yeni bir veri türü sınıfı elde etmek için bir programlama dili kaydında bu kaydın veri alanlarını işleyen prosedürler ve işlevlerle veri yapılarının birleştirilmesiyle elde edilir. Kapsülleme, alanlara ve yöntemlere erişimi arabirime göre korumanıza olanak tanır. Erişime yalnızca genel yöntemlere ve alanlara izin verilir. Yöntemlerin tamamı ve bunların uygulanmasının incelikleri gizlidir.

TMyClass \u003d sınıf

IntField: Tamsayı;

fonksiyon MyFunc (a: Tamsayı): Tamsayı;

prosedür MyProc; son;

Kapsülleme prensibini kullanarak, çalışmaya hazır yazılım boşluklarını değiştirmek mümkün hale gelir. Örneğin, Delphi sınıf kitaplığı aslında uygulama programları oluşturmak için bir dizi yapı taşıdır.

Encapsulation kullanarak, nesneye ait verileri bu verilere doğrudan erişirken ortaya çıkabilecek olası hatalardan koruyoruz. Ek olarak, bu ilkenin uygulanması çoğu zaman program kodundaki olası hataların yerelleştirilmesine yardımcı olur. Ve bu, bu hataları bulma ve düzeltme sürecini büyük ölçüde basitleştirir. Bununla birlikte, kapsülleme kullanımı, nesnenin elemanlarına erişim verimliliğinde bir azalmaya yol açar. Bunun nedeni, nesnenin iç öğelerini (değişkenlerini) değiştirmek için yöntemler çağırma ihtiyacından kaynaklanmaktadır. Ancak bilgisayar teknolojisinin mevcut gelişme düzeyinde, verimlilikteki bu kayıplar önemli bir rol oynamamaktadır.

Karmaşık sorunları anlamada önemli bir basitleştirme, hiyerarşinin karmaşıklığını artırarak elde edilir. Burada hiyerarşi, soyutlamaların sıralanması, seviyelere göre düzenlenmesi anlamına gelir. Hiyerarşinin seviyeden seviyeye karmaşıklığı kalıtım yoluyla elde edilir.

Miras ilkesi, "ata - torun" kavramları ile çalışır ve mirasçının tüm özelliklerini kabul ederek mirasçıya ait özellikler kümesinin genişlemesini sağlar.

Herhangi bir sınıf başka bir sınıftan türetilebilir. Bunu yapmak için, bunu bildirirken, ana sınıfın adı belirtilir:

TChildCIass \u003d sınıf (TParentClass)

Türetilmiş sınıf, üst sınıfının alanlarını, yöntemlerini ve özelliklerini otomatik olarak miras alır ve yenilerini ekleyebilir. Böylece, miras ilkesi, karmaşık sınıfların adım adım oluşturulmasını ve kendi sınıf kitaplıklarınızın geliştirilmesini sağlar. Kalıtımın anlamı ve evrenselliği, her seferinde ("sıfırdan") yeni bir nesneyi tanımlamanın gerekli olmamasıdır, ancak "ebeveyni" (temel sınıf) belirleyebilir ve yeni sınıfın ayırt edici özelliklerini tanımlayabilirsiniz. Sonuç olarak, yeni nesne, ana sınıfın tüm özelliklerine ek olarak kendi ayırt edici özelliklerine sahip olacaktır.

Object Pascal'daki tüm sınıflar, TObject sınıfı olan tek bir ebeveynden türetilmiştir. Bu sınıfın hiçbir alanı veya özelliği yoktur, ancak herhangi bir nesnenin tüm yaşam döngüsünü sağlayan en genel yöntemleri içerir - yaratılmasından yıkıma kadar. Bu nedenle, bir programcı TObject'in alt öğesi olmayan bir sınıf oluşturamaz. Sonraki iki reklam aynı.

TaClass \u003d sınıf (TObject)<==> TaClass \u003d sınıf

Kalıtım ilkesi, dallanan bir sınıf ağacının yaratılmasına yol açar. Her soyundan gelen, ebeveyninin yeteneklerini yenileriyle tamamlar ve bunları torunlarına aktarır. Örneğin, TPersistent sınıfı, veriyi bir dosyaya kaydedip ondan alabildiği için üst TObject öğesinin yeteneklerini zenginleştirir, sonuç olarak tüm soyundan gelenler bunu yapabilir. TComponent sınıfı da geliştirici ortamıyla nasıl etkileşim kuracağını bilir ve bu beceriyi torunlarına aktarır. TControl yalnızca dosyalarla ve geliştirici ortamıyla çalışamaz, aynı zamanda ekranda görünen görüntülerin nasıl oluşturulacağını ve korunacağını da bilir ve onun soyundan gelen TWinControl, Windows pencereleri vb. Oluşturabilir.

Object Pascal'da yalnızca sözde tek kalıtım mümkündür, ancak gerçek dünyada bir çocuğun iki ebeveyni vardır, bu nedenle bir dizi dil (örneğin, C ++) çoklu kalıtım için bir mekanizma sağlar. Çoklu kalıtım, gerçek dünyayı modelleme açısından daha mantıklıdır, ancak programlama dillerinin uygulanmasını zorlaştırır.

Çok biçimlilik, işlenmekte olan verilerin türüne bağlı olarak aynı olaya farklı anlamlar vermenin bir yoludur. Bu ilke, aynı adı taşıyan eylemin çeşitli uygulama biçimlerini tanımlar.

Polimorfizmin amacı, bir sınıf için ortak eylemleri tanımlamak için tek bir ad kullanmaktır ve hiyerarşideki her nesne veya sınıf, bu eylemi kendisine uygun, kendi koduyla kendi yolunda uygulama yeteneğine sahiptir. Bu nedenle, polimorfizm, benzer problemleri farklı şekillerde çözmek için sınıfların bir özelliğidir.

Object Pascal'da, bir sınıfın davranışsal özellikleri, içerdiği bir dizi yöntemle tanımlanır. Bu ilke, bir sınıfın özelliklerini yeni yöntemler ekleyerek değil, yöntemlerden birini veya bir dizi yöntemi tamamlayarak genişletmeniz gerektiğinde kullanılır. Programcı, bir sınıfın nesillerindeki bir yöntemin veya başka bir yöntemin algoritmasını değiştirerek, bu nesnelere ebeveynde bulunmayan belirli özellikleri verebilir.

Yöntemi değiştirmek için, onu çocukta geçersiz kılmanız gerekir, örn. neslinde aynı isimdeki yöntemi ilan edin ve içinde gerekli eylemleri uygulayın. Sonuç olarak, farklı bir algoritmik temele sahip olan ve nesnelere farklı özellikler veren ana nesnede ve alt nesnede aynı adı taşıyan iki yöntem çalışacaktır. Nesne polimorfizminin özü budur.

Ek olarak, Object Pascal polimorfizmi, yalnızca ebeveyn yöntemlerin kalıtım mekanizması ve örtüşmesi ile değil, aynı zamanda ana yöntemlerin torunlarının yöntemlerine başvurmasına izin veren sanallaştırma yoluyla da elde edilir.

Polimorfizmin avantajı, tek bir eylem sınıfı için tek bir arabirime izin vererek programların karmaşıklığını azaltmaya yardımcı olmasıdır. Duruma bağlı olarak belirli bir eylemin seçimi derleyiciye bırakılmıştır.

Nesne yönelimli yaklaşımdaki programların yapısı, yapısal tasarımda olduğu gibi bir hiyerarşi ağacı ile değil, bir nesne etkileşim grafiği ile temsil edilir. Bu mekanizmalar, nispeten basit nesnelerden karmaşık nesneler oluşturmayı mümkün kılar. Sonuç, kodun yeniden kullanımında önemli bir artış ve çeşitli kullanımlar için sınıf kitaplıkları oluşturma yeteneğidir.

Nesne yaklaşımına dayalı programlama teknolojilerinin hızlı gelişimi birçok sorunu çözmeyi mümkün kılmıştır. Böylece, görsel programlamayı destekleyen ortamlar yaratıldı, örneğin Delphi, C ++ Builder, Visual C ++, vb. Görsel ortamı kullanırken, programcı, özel kitaplık eklemek ve yapılandırmak için görsel araçlar kullanarak, gelecekteki ürünün arayüzleri gibi bir parçayı tasarlama fırsatına sahiptir. bileşenleri. Görsel tasarımın sonucu, ilgili kodların zaten girilmiş olduğu gelecekteki programın hazırlanmasıdır.

3. Sorunları çözmek için farklı yaklaşımların uygulanması

Problemi çözerken yazılım uygulamasının nasıl farklı yaklaşımlar kullanacağını düşünelim: Doğal bir sayıdaki ilk ve son rakamı değiştirin. Pascal uygulama dili.

Yapısal yaklaşım. Program kodu şuna benzer:

program Perestanovka;

N, copy_N, sayı, copy_number, ilk, son, adım, yeni_N: tamsayı;

(program gövdesi)

(sayı girişi)

yaz ("girdi N \u003d");

(bir sayıdaki hane sayısını sayma)

sayı: \u003d sayı + 1;

copy_N: \u003d copy_N div 10;

copy_N ise<>0 sonra

sayı \u003d 0 ise o zaman

(10 ^ (sayı-1) kuvvetinin hesaplanması)

copy_number: \u003d sayı;

(ilk ve son haneyi vurgulayarak)

copy_N: \u003d copy_N div 10;

kopya_numarası: \u003d kopya_sayı-1;

copy_number ise<>1 sonra

copy_number: \u003d sayı;

(takas numaraları)

adım: \u003d adım * 10;

kopya_numarası: \u003d kopya_sayı-1;

copy_number\u003e 1 ise

new_N: \u003d N-ilk * adım + son * adım-son + ilk;

(sonuç çıktısı)

Kod doğrusaldır, tüm eylemler sıralı olarak gerçekleştirilir, kontrol aktarımı goto operatörü kullanılarak gerçekleştirilir.

Modüler yaklaşım. Program kodu şuna benzer.

program Perestanovka;

(değişken bildirim bölümü)

N, sayı, yeni_N: tamsayı;

(prosedür ve işlev bildirimi bölümü)

(bir sayıdaki basamak sayısını sayma prosedürü)

nN iken<>0 yapmak

(bir sayının ilk basamağını belirleme işlevi)

kol iken<>1 yapmak

first_cifra: \u003d NN;

(bir sayının son basamağını belirleme işlevi)

last_cifra: \u003d NN mod 10;

(bir tamsayıyı bir tamsayı kuvvetine yükseltme işlevi)

pokaz iken<>0 yapmak

(program gövdesi)

yaz ("girdi N \u003d");

kol_cifr (sayı, N);

numara ise<>0 sonra

new_N: \u003d N-first_cifra (N, sayı) * stepen (10, sayı-1) +

last_cifra (N) * stepen (10, sayı-1) -

last_cifra (N) + first_cifra (N, sayı)

Program kodu daha okunabilirdir, aynı türden eylemler prosedürler ve işlevlerle birleştirilir, programdaki bildirilen değişkenlerin sayısı, dolayısıyla ayrılmış bellek azalmıştır. Optimizasyon için, tüm prosedürler ve işlevler bir modülde birleştirilmeli ve programa bağlanmalıdır. Modülün organizasyonu, geliştirilen prosedürlerin ve işlevlerin tekrar tekrar kullanılmasını mümkün kılacak, bu da programlama sürecini kolaylaştıracak ve program kodlarını azaltacaktır.

Nesne yaklaşımı. Program kodu şuna benzer.

Program perestanovka;

sayı: tamsayı;

prosedür girişi;

prosedür çıktısı;

prosedür kol_cifr (var kol: tamsayı; NN: tamsayı);

prosedür perestavka (var NN: tamsayı; cf, cl: tamsayı);

function first_cifra (NN: tamsayı; kol: tamsayı): tamsayı;

function last_cifra (NN: tamsayı): tamsayı;

step fonksiyonu (bas: tamsayı; pokaz: tamsayı): tamsayı;

pokaz iken<>0 yapmak

prosedür tN.input;

yazma ("giriş N \u003d");

readln (N.znach);

prosedür tN.kol_cifr (var kol: tamsayı; NN: tamsayı);

nN iken<>0 yapmak

function tN.first_cifra (NN: tamsayı; kol: tamsayı): tamsayı;

kol iken<>1 yapmak

first_cifra: \u003d NN;

function tN.last_cifra (NN: tamsayı): tamsayı;

last_cifra: \u003d NN mod 10;

prosedür tN.perestanovka (var NN: tamsayı; cf, cl: tamsayı);

NN: \u003d NN-cf * stepen (10, sayı-1) + cl * stepen (10, sayı-1) -cl + cf;

prosedür tN.output;

Form1.Edit1.Clear;

Form1.Edit1.Text: \u003d inttostr (N.znach);

N.kol_cifr (N. sayı, N.znach);

eğer N. sayı<>0 sonra

N.perestanovka (N.znach, N.first_cifra (N.znach, N. sayı), N.last_cifra (N.znach));

Program kodu, modüler bir yaklaşımla program koduna çok benzer, ancak artık nesne yaklaşımının tüm olanaklarını kullanabilirsiniz: kalıtım, çok biçimlilik, alt sınıflar oluşturma, özelliklerini ana sınıfa kıyasla genişletme, vb.

Sonuç

Çalışma sırasında, geliştirme bağlamında tasarım ve programlamaya yönelik çeşitli yaklaşımlar dikkate alınmış, karakteristik özellikleri, avantajları ve dezavantajları belirtilmiştir.

Bir veya başka bir yaklaşımı uygularken yazılım uygulamasının nasıl gerçekleştiğine dair örneklerle gösterilir.

Programlama teknolojisindeki evrimin, programlamayı daha anlaşılır hale getirmeyi, karmaşık programları ayrı parçalara ayırmayı ve her birini bağımsız olarak tasarlamayı ve programlamayı mümkün kıldığı sonucuna varılabilir, yazılım ürünlerinin karmaşıklığına rağmen, kaynak maliyetlerini azaltmanın yolları vardır.

Geliştirme durmuyor - programcılara büyük fırsatlar sunan, hazır program bloklarını kullanarak işlerini kolaylaştıran, yazılım ürünlerini tasarlama sürecini bağımsız, sadece programcı için değil müşteri için de anlaşılır hale getiren yeni yaklaşımlar ortaya çıkıyor. Program gerçek dünyanın bir modeline dönüşüyor.

Kullanılan kaynakların listesi

1. Booch, G. İngilizce'den çevrilmiş C ++ / G. Booch örnekleriyle nesneye yönelik analiz ve tasarım. ed. I. Romanovsky ve F. Andreev. - M .: Williams, 2008. - 721 s.

2. Arkhangelsky, A. Ya. Delphi 7 / A.Ya'da programlama Arkhangelsky. M .: OOO "Binom-Press", 2003. - 1152 s.

3. Programlama. Programlama üzerine dersler. - Erişim modu www.studifi.ru

4. Programlama teknolojisi. Yapısal ve Nesne Yönelimli. - Erişim modu www.sgm.forumssity.ru

5. Yapısal programlama teknolojisi. ... - Erişim modu www.razlib.ru

6. Çevrimiçi Bilişim. Modüler programlama. - Erişim modu www.online-ane.ru.

Allbest.ru'da yayınlandı

...

Benzer belgeler

    Ambalaj ürünlerinin tasarımına yönelik mevcut yaklaşımın dikkate alınması. Bilgisayar destekli tasarım araçlarını kullanarak geliştirme yöntemleri. Reklam broşürleri yerleştirmek için kullanılan yapıların pazar incelemesi. Eskizlerin grafik ve cilt olarak yürütülmesi.

    tez, 08/28/2014 eklendi

    Verimliliği artırmak için ağır takım tezgahları için modüler-modüler takım sistemleri oluşturmaya yönelik ilkelerin geliştirilmesi. Modüler bir aletin gerilme-uzama durumunun teorik analizi, ağır torna tezgahlarının özelliklerini dikkate alarak.

    tez, 06/04/2009 eklendi

    Halka açık yemek işletmelerinin termal ekipmanı için gereklilikler. Pişirme su ısıtıcısının amacı ve sınıflandırılması, modern tasarımları. Gaz kesitli modüler kazan KPGSM-60'ın modernize edilmiş tasarımının açıklaması.

    11/27/2012 tarihinde dönem ödevi eklendi

    Karmaşık nesnelerin incelenmesine ana yaklaşım sistem analizidir. Sistem analizinin pratik uygulaması - yapısal sistem analizi, ilkeleri ve yöntemleri. Yapısal modellemenin kökenleri. Yapısal sistem analizi modellerinin sınıfları.

    Özet, 18.02.2009 eklendi

    Açıklama CAD "Assol" - bir çizim, fotoğraf veya örnekten herhangi bir karmaşıklıktaki model modellerini hızlı ve doğru bir şekilde geliştirmenize olanak tanıyan modüler bir yazılım paketi. Teknik eskizin kombinatoryal sentezi. "Assol-Design" uygulamasının kapsamı.

    eğitim eklendi 02/07/2016

    Atmosferik kurutma deposu. Kurutma odası "Inter-Ural" teknik özellikleri. Atölye tasarımı için temel gereksinimler. Kereste ürünlerinin üretiminin teknolojik süreci. Ağaç işleme atölyesinin üretim programı.

    dönem ödevi, 07/13/2015 eklendi

    Doğrusal olmayan programlama modellerinde çözümün optimizasyonu. Doğrusal bir programlama probleminin grafik yöntemle çözümü. Suntaların boşluklara kesilmesinin geliştirilmesi. Parça işlemeye harcanan zaman. SPU modellerine dayalı kararların gerekçelendirilmesi.

    dönem ödevi, 05/17/2012 eklendi

    Organizasyonel hazırlık, sistemin proje öncesi denetimi ve teknik şartnamelerin geliştirilmesi. Üretim, işçilik ve yönetim organizasyonunun teknik tasarımı için bir dizi dokümantasyonun uzmanlığı ve onayı.

    sunum 12/09/2015 tarihinde eklendi

    Yapısal analiz ve tasarım için metodoloji. Bu metodolojiyi kullanan sistemin açıklaması bir modeldir. Doğal ve grafik dillerin kullanımı. Fonksiyonel, bilgilendirici ve dinamik modelleme. Sabit kıymetler metodolojisi.

    Özet, 18.02.2009 eklendi

    Hidroelektrik santralin ana ünitelerinin teknik özelliklerinin açıklaması. Yağ basıncı ünitesi için kontrol programı için algoritmanın geliştirilmesinin özellikleri, Siemens mikro denetleyicilerinin programlanmasının özellikleri. Bakım güvenliği kuralları.