Prosedur proqramlaşdırma və OOP arasındakı fərqi izah edə bilərsiniz?


cavab 1:

Orijinal sual:

Prosedur proqramlaşdırma və OOP arasındakı fərqi izah edə bilərsiniz?

Cavablar:

Əvvəlcə prosedur və obyekt yönümlü proqramlaşdırmanın nə demək olduğunu təyin edək.

Tərif - prosedur dili nə deməkdir? Prosedur dili bir proqram yaratmaq üçün proqramlaşdırma kontekstində bir sıra yaxşı qurulmuş addımlar və prosedurları ifadə edən kompüter proqramlaşdırma dilinin bir növüdür. Hesablama tapşırığının və ya proqramın icrası üçün təlimat, funksiya və əmrlərin sistematik bir ardıcıllığını ehtiva edir. Prosedur dili də imperativ dil adlandırılır. Texnologiya prosedur dilini izah edir Bir prosedur dili, adından da göründüyü kimi, əvvəlcədən müəyyən edilmiş və yaxşı qurulmuş prosedurlar və funksiyalara və proqram arxitekturasında alt proqramlara əsaslanaraq, kompüterin istənilən status və ya nəticə əldə etməsi üçün atdığı bütün addımları göstərir. çatmaq. Prosedur dili bir proqramı dəyişənlərə, funksiyalara, təlimatlara və şərti operatorlara ayırır. Bir tapşırıq yerinə yetirmək üçün məlumatlar və dəyişənlər üzərində prosedurlar və ya funksiyalar yerinə yetirilir. Bu prosedurlar, proqram iyerarxiyası arasında, habelə digər prosedurlardan başqa hər hansı bir yerə çağırıla / çağırıla bilər. Prosedur dilində yazılmış bir proqram bir və ya daha çox proseduru ehtiva edir. Prosedur dili C / C ++, Java, ColdFusion və PASCAL kimi diqqətəlayiq dillərə malik ən çox istifadə olunan proqramlaşdırma növlərindən biridir.

İndi obyekt yönümlü proqramlaşdırmanı təyin edək.

Tərif - Obyekt yönümlü proqramlaşdırma (OOP) nə deməkdir? Obyekt yönümlü proqramlaşdırma (OOP), obyektlərin ətrafında qurulmuş bir proqram proqramlaşdırma modelidir. Bu model məlumatları obyektlərə (məlumat sahələrinə) bölür və siniflər (metodlar) elan edərək obyektlərin məzmununu və davranışlarını təsvir edir. OOP funksiyalarına aşağıdakılar daxildir: Encapsulation: Bu, proqram quruluşunu idarə etməyi asanlaşdırır, çünki hər bir obyektin icrası və vəziyyəti yaxşı müəyyən edilmiş hədlər gizlidir. Polimorfizm: Bu, mücərrəd varlıqların bir neçə istiqamətdə həyata keçirildiyini göstərir. Vərəsəlik: Bu, icra hissələrinin iyerarxik tənzimlənməsinə aiddir. Obyekt yönümlü proqramlaşdırma sadələşdirilmiş proqramlaşdırma imkanı verir. Faydalara təkrar istifadə, reaktorinq, genişlənmə, texniki xidmət və səmərəlilik daxildir. Techopedia, obyekt yönümlü bir proqramlaşdırma izah edir (OOP) OOP ən azı on ildir ki, seçim proqramı modelidir. OOP modul quruluşu proqramçılara çox sayda ardıcıl kodların əvəzinə idarə olunan bloklarda proqram yaratmağa imkan verir. OOP'un böyük üstünlüklərindən biri, obyektlərin və təriflərin son məhdudiyyətə sahib olmadığı genişlənmə qabiliyyətidir. Məlumatların və metodların ayrılması həm də köhnə xətti proqram dillərində yaranan ümumi bir problemin qarşısını alır. Xətti bir kodda bir səhv baş verərsə, bir sistem tərəfindən tərcümə oluna bilər və izlənməsi çətin olan müxtəlif səhvlərə səbəb ola bilər. Əksinə, metod və məlumatların ayrılması ilə bir OOP proqramı artan səhvlərə həssas deyildir. Populyar OOP dillərinə Java, C dil ailəsi, VB.NET Mağazası və Python daxildir. Sözdə "təmiz" OOP dilləri Bunlara Scala, Ruby, Eyfel, JADE, Smalltalk və Zümrüd daxildir.

Təriflərin mənbəyi Object Oriented Programming (OOP) nədir? - Techopedia'dan tərif və prosedur dili nədir? - Techopedia tərifi

İndi. Həyata keçirilmənin fərqinə baxaq.

Prosesə başlayacağıq və bunun ən asan yolu, bilirəm ki, Arduino üçün C dilindən istifadə etməkdir.

Mən əsas tətbiqlərdən biri olduğu üçün sönən işıq təlimini seçdim.

// Quraşdırma funksiyası kartı sıfırladıqda və ya ləğv etdikdə bir dəfə yerinə yetirilir. void quraşdırma () {// rəqəmsal pin LED_BUILTIN-i çıxış kimi işə salın. pinMode (LED_BUILTIN, OUTPUT); } // döngə funksiyası təkrar-təkrar işləyir və boşalma loop () {digitalWrite (LED_BUILTIN, HIGH); // LED-i yandırın (HIGH bu gərginlik səviyyəsidir) gecikmə (1000); // ikinci bir digitalWrite gözləyin (LED_BUILTIN, Aşağı); // Gərginliyi LOW (1000) qədər gecikdirərək LED-i söndürün. // bir saniyə gözləyin}

İndi kodu biraz daha yaxşı izah edim. Onların iki funksiyası var, quraşdırma və döngə. Döngü dəfələrlə çağırılır və quraşdırma yalnız bir dəfə çağırılır. Nominal gücünü yüksək və ya aşağı səviyyəyə təyin etmək üçün digitalWrite əmrini LED-ə göndərirsiniz. Gecikmə işığın nə qədər davam etdiyini və ya sönməyini göstərir, bu halda 1000 ms və ya təxminən 1 saniyə. Çox sadə, lakin bu prosedur proqramlaşdırmanın əsaslarını bildiyinizi göstərir. Bir prosedur və ya təlimat yazırsınız və bu sona qədər təkrarlanır. Tələb olunan kodun əlavə mürəkkəbliyi tələb olunmur.

C # və OOP nümunə vaxtı.

sistemdən istifadə; System.Collections.Generic istifadə; System.Linq istifadə; System.Text istifadə edərək; Ad boşluğu oops {public sinif müştəri {// üzv dəyişənlər public int CustID; ictimai simli adı; ümumi simli ünvan; // sahələrin müştərisini işə salmaq üçün konstruktor () {CustID = 1101; Adı = "Tom"; Ünvan = "ABŞ"; } // Müştəri qeydlərini (funksionallığı) göstərmək üçün açıq boşluq displayData () {Console.WriteLine ("Müştəri =" + Ehtiyatlı); Console.WriteLine ("Ad =" + Ad); Console.WriteLine ("Ünvan =" + Ünvan); } // giriş nöqtəsi üçün kod}} sinif proqramı {statik void main (string [] args) {// obyekt təcəssümü müştəri obj = yeni müştəri (); // obj.displayData () adlandıran metod; // Console.WriteLine (obj.CustID) adlandıran sahələr; Console.WriteLine (obj.Name); Konsol.WriteLine (obj.Address); }}}

Budur OOP'un klassik bir nümunəsi. Sizin üçün mövcud olan bütün obyektləri müəyyənləşdirən bir müştəri sinifiniz var. Yazmaq üçün hələ də funksiyalarınız / metodlarınız var. Ancaq əsas fərq, hər bir metodu / funksiyanı vəzifələrinə görə bölmək istədiyinizdir. Oradan əsas metodunuz proqramın giriş nöqtəsidir və burada kritik kodunuz olmalıdır.


cavab 2:

Java-da OOPS konsepsiyası

Prosedur dili funksiyalara əsaslanır, lakin obyekt yönümlü dil real dünya obyektlərinə əsaslanır. Prosedur dili funksiyaların yerinə yetirilmə qaydasına məna verir, obyekt yönümlü dil isə obyektlərin vəziyyət və davranışlarına məna verir. Prosedur dili məlumatları bütün proqrama təqdim edir.Lakin obyekt yönümlü dil yuxarıdan aşağıya doğru proqramlaşdırma paradiqmasına əməl edir, obyekt yönümlü dil isə aşağıdan yuxarıya doğru proqramlaşdırma paradiqmasını izləyir. Prosedur dili təbiətdə mürəkkəbdir, dəyişdirilməsini, genişləndirilməsini və saxlanmasını çətinləşdirir, lakin obyekt yönümlü dil daha az mürəkkəbdir.Bu dəyişdirmək, genişləndirmək və saxlamaq asandır. Prosedur dili kodun təkrar istifadəsi üçün daha az imkanlar təqdim edir, lakin obyekt yönümlü dil kodu təkrar istifadə üçün daha çox seçim təklif edir.


cavab 3:

Prosedur proqramlaşdırma əsas abstraksiya mexanizmi kimi prosedurlarla proqramlaşdırılır. Hə.

Bir prosedur nədir? Adı ilə çağırıla bilən və adlandırıldığı kontekstdən, parametrlərdən və bəzi işlərdən sonra dəyərlər və istinadları həmin kontekstə qaytara bilən bir kod kodudur.

Müəyyən bir dəyər tez-tez prosedur daxilində bir dəyər kimi verilir. Prosedurları dəstəkləyən dillərdə, çox vaxt funksiyalar kimi istifadə olunur, parametrlər arqument kimi işlənir və bu arqumentlər üçün funksiyanın dəyəri kimi hesablanan prosedur daxilində geri dönüş dəyəri olur. Bununla yanaşı, prosedur bir və ya daha çox dəyərləri çağırış kontekstindəki parametrlər vasitəsilə, ya da dil onu dəstəklədiyi halda və ya istinad ilə ötürülən bir dəyəri dəyişdirməklə və ya geri qaytarma dəyərini parametrlərlə ötürsə, bu da idiotikdir. Bayraq, status və ya səhv ekranı istifadə olunur. Unix-dən çox təsirlənən proqramlaşdırma mədəniyyətlərində 0, müvəffəqiyyəti (və ya ən azı məlum səhvlərin olmamasını) və mənfi bir rəqəmi bilmək üçün geri qaytarılır.

Model üçün o qədər də zəruri deyil, amma prosedurları əsas abstraksiya mexanizmi kimi istifadə edən, idarəetmə axını olmayan, eyni dərəcədə məlum yarı sehrli metodlardan çox istifadə edən bir dil təsəvvür edə bilmirəm.

əgər (vəziyyəti) {doThisThing ()} başqa {doThatThing ()}

while (şərt) {keepOnDoingThisThing ()}

Düşünürəm ki, əksər proqramçıların şüurunda "prosedural" proqramlaşdırma "strukturlaşdırılmış proqramlaşdırma" ilə çox əlaqəlidir. Strukturlaşdırılmış proqramlaşdırma yeni olduqda, bütün tələb olunan idarəetmə axını nümunələrinin bir prosedur çərçivəsində inşa edilə biləcəyi nəzarət axını konstruksiyalarının praktik bir dəsti olduğu məlum oldu:

Alternativləri seçin

  • əgər başqa deyilsə (Boolean dəyərinə əsaslanan iki seçim) dava və ya keçid (istənilən məbləğə əsaslanan çox seçim)

Təkrar

məlum hədd ilə:

  • loops üçün (ümumiyyətlə müəyyən sayda iterasiya) predach loops (kolleksiyanın ölçüsü qədər, bəlkə də üzvlərin özləri üzərində)

ad hoc məhdudiyyətləri ilə:

  • while (0 və ya daha çox təkrarlama) isə while (1 və ya daha çox təkrarlama)

və təəssüf ki, populyar deyil:

  • Çıxış zaman loop

Bu kod çıxmadan əvvəl ən azı bir dəfə və çıxdıqdan sonra sıfır və ya daha çox dəfə çalışır.

Bu strukturlar bir-birlərinə münasibətdə həyata keçirilə bilər, lakin bəzi hallarda bu təəccüblüdür. Keçid / iş ifadələrini iç içə ifs ilə tam təqlid etmək çox çətindir. Məqsədlərimiz üçün, demək olar ki, həmişə dil tətbiqinə inteqrasiya olunmaq və bir işçi bir proqramçı olaraq kod yazmaqda çətinlik çəkdiyiniz şeylər edə biləcəyiniz vacibdir. Mən təsəvvür edə biləcəyim hər hansı bir təmiz və ya ilk növbədə prosedur dildə, quraşdırılmışlar kimi işləyən öz idarəetmə quruluşlarınızı yazmaq çox çətin və bir çox hallarda tamamilə qeyri-mümkün olardı. Beləliklə, içərisində olanlardan istifadə edirsiniz. Prosedur, quruluşlu proqramlaşdırma çox məhdud bir dünyadır.

Bir qayda olaraq, prosedur proqramlaşdırma dillərində də bir növ modul anlayışı var, bir sıra prosedurlar üçün adı verilən bir konteyner. Bu prosedurların bəziləri modul xaricində görünən və istifadə edilə bilən, digərləri yalnız modul daxilində görünən və istifadə edilə biləndir, yəni eyni modul daxilində olan digər prosedurlar vasitəsilə. Modulları olan əksər dillərdə, bir modul, modulda müəyyən edilmiş prosedurlar tərəfindən görünən və paylaşılan dəyişənləri də ehtiva edə bilər. Belə bir modul sistemi müəyyən dərəcədə encapsulation və məlumatların gizlədilməsinə imkan verir: Modul xaricində görünən prosedurların həyata keçirilməsinə imkan verən bu prosedurlar və dəyişənlər bir sistemin strukturu boyunca birləşməyə kömək edə bilər nəzarət etmək. Hansı xoşdur.

Bir addım irəli getmisinizsə və eyni modulun çox istifadəsinə icazə verərsinizsə, hər istifadədə modulda müəyyən edilmiş dəyişənlərin öz nüsxəsi olsa, modul obyektin bir növünə oxşayır. Dəyişənləri olan modulların nümunələrini əsas götürsəniz və prosedurları bir şəkildə aralarında bölüşdürdünüz ki, yalnız bir nüsxəsinə sahib olursunuzsa, C ++ proqramının işinə çox yaxınsınız. Bu incə modul, prosedur, strukturlaşdırılmış bir proqram obyekt yönümlü bir proqramlaşdırma deyil.

Obyekt yönümlü proqramlaşdırma, əsas abstraksiya mexanizmi kimi obyektlərlə proqramlaşdırmadır. Hə.

Bir obyekt nədir? Uzunmüddətli bir hesablama vahididir ki, bir şey etmək istənə bilər. Obyekt yönümlü proqramlaşdırmanın arxetipi və nümunəsi Smalltalkdır. Smalltalk-da hər bir dəyər bir obyektdir (və ya heç olmasa obyekt olmayan dəyərlər, göründükləri kimi). Hesablama bir-birinə mesaj göndərən obyektlər tərəfindən aparılır. Smalltalk tətbiqetmələri bir qədər fərqlənir, lakin bu ümumi fikirdir:

Yaddaşdakı əşyalar. Bir obyekt başqa bir obyektin bir şey etməsini istədikdə, istədiyi bir mesaj yaradır və nəzərdə tutulan obyektə göndərir. Mesajlar obyektdir. Obyektlər statusun qorunmasına cavabdehdir, yəni dəyişənləri ehtiva edir. Heç bir kod işlətmirsiniz. Bir obyekt mesaj aldıqda onu öz sinfinə ötürür. Dərslər obyektdir. Dərslər obyektlərin yaradılması və idarə olunmasına cavabdehdir, kodu işlətmirlər. Sinif mesajı metaklasına göndərir. Meta sinifləri obyektdir. Meta dərsləri metodların idarə olunmasına cavabdehdir. Metaklass metodlarını araşdırır və mesaja uyğun olanı tapır. Metodlar obyektdir. Yol boyunca mesaj obyekti müxtəlif əlavə məlumatlar, o cümlədən mesajı alan obyektə istinadla bəzədilib. Metod, orijinal mesajda verilən bütün arqumentlərdən istifadə edərək kodun icrasına cavabdehdir. Metod, kodunu mesajı alan obyektin kontekstində icra edir. Metod kodu, yaradılan və digər obyektlərə göndəriləcək mesajları olan bir yazıdır. Metaklass mesaja uyğun bir metod tapmasa, obyekt sinifinin ana siniflərinin metaklasları axtarılır. Buna "miras" deyilir.

Ola bilər ki, bu və ya digər tətbiqetmədə müəyyən metodlar səmərəlilik səbəbindən həyata keçirilməyə birləşdirilir, amma prinsipcə bütün kiçik bir danışıq sistemi eyni şəkildə işləyə bilər.

Smalltalk-da proqramlaşdırma, metodlarla göndərilən ssenari mesajlarının birləşməsi və yaşamaq üsulları üçün yeni siniflərin yaradılması (metaklasslarla) deməkdir. Bu, hər şey kimi, nəzarət axınının ekvivalentinə də aiddir.

Prosedur dildə, bu psevdokod kimi koddan istifadə edərək hər hansı bir kolleksiya üzvü üçün hərəkət edə bilərsiniz:

önə (toplanışda olan şey) doThisActionOn (theThing)

Tipik kiçik bir söhbətdə mesaj göndərmək üçün uyğun skript aşağıdakı kimi görünə bilər:

aCollection edin: [aThing | aThis takeThisAction].

Burada takeThisAction aCollection-dakı hər aThing obyektinə göndərilən bir mesajdır. (Yeri gəlmişkən, kvadrat mötərizədəki kod Smalltalk Lambda adlandırdığı bir blokdur. Bu bir obyektdir.) İkisini müqayisə etsək, proseduradan fərqli olaraq obyekt yönümlü proqramlaşdırmanın bəzi kritik xüsusiyyətlərini görürük:

  • Prosedur məcəlləsində, kolleksiya üzvlərinin necə keçməsini seçirik və önləmə mexanizmini seçirik. Obyekt yönümlü kodda kolleksiyanı bir travers yerinə yetirməsini xahiş edirik. Bunun necə edildiyini bilmirik. Prosedur kodu, çağırış kodu doThisActionOn adı ilə prosedura giriş əldə etməlidir, obyekt yönümlü kodda takeThisAction yalnız bir simvoldur. Koleksiyadakı obyektlərin bunu necə şərh edəcəyini bilmirik.

Bu obyekt yönümlü proqramlaşdırmanın mahiyyətidir və "pulu təhvil verərək proqramlaşdırma" kimi təsvir edilmişdir. Digər tərəfdən prosessual proqramlaşdırmada hər hesablamanın nə etdiyini açıq şəkildə bildirməliyik.