Езици за програмиране PDF
Document Details
Tags
Summary
Document details езици за програмиране, включително въведение в езиците за програмиране, видове езици, описване на семантиката и синтаксиса на езика за програмиране, превод на езици за програмиране.
Full Transcript
**Езици за програмиране** **I. Въведение в езиците за програмиране** **Дефиниция на език за програмиране:** Система от знаци, използвани за комуникация между човек и компютър, позволяваща на хората да пишат точни алгоритми (програми), които компютрите могат да изпълняват. **Компоненти на езика...
**Езици за програмиране** **I. Въведение в езиците за програмиране** **Дефиниция на език за програмиране:** Система от знаци, използвани за комуникация между човек и компютър, позволяваща на хората да пишат точни алгоритми (програми), които компютрите могат да изпълняват. **Компоненти на езика за програмиране:** ○ **Синтаксис:** Правила, управляващи как елементите на езика са подредени и комбинирани. ○ **Семантика:** Значението на елементите на езика и техните комбинации. **Значение както на синтаксиса, така и на семантиката:** ○ И двете са от решаващо значение за ефективното програмиране. ○ Една програма се нуждае от синтактична коректност, за да компилира и стартира, и семантична коректност, за да произведе желаните резултати. ○ Аналогия: „Зелените идеи спят бясно" е синтактично правилно на български, но семантично безсмислено. В програмирането синтактично правилният код може да не функционира по предназначение, ако семантиката е грешна. **Примери:** Конкретни случаи на синтактично правилни, но семантично неправилни кодови фрагменти. **II. Видове езици за програмиране** **Класификация въз основа на област на приложение:** ○ **Универсални езици:** Подходящи за различни домейни. ○ **Специализирани езици:** Проектирани за конкретни проблемни области. Например PROG е специално за обработка на данни. **Класификация въз основа на нивото на абстракция:** ○ **Първо поколение (1950-те):** Машинни езици, работещи директно върху хардуер, използвайки двоичен код (0s и 1s). ○ **Второ поколение (началото на 1950-те):** асемблерни езици, използващи мнемонични символи за представяне на машинни инструкции, по-лесни за разбиране от машинните езици, но все още зависими от хардуера. ○ **Трето поколение (1954-1970):** Езици от високо ниво, по-близки до човешкия език и независими от хардуера. Примери: FORTRAN, ALGOL 58, COBOL6. Тези езици са по-ориентирани към проблеми. ○ **Четвърто поколение (1970-80):** Езици на много високо ниво, абстрахиращи се от детайлите на хардуера, фокусирани върху решаването на проблеми. Примери: Smalltalk, Prolog. Тези езици предлагат повече функции за модулно програмиране и абстракция на данни. ○ **Пето поколение (1990 - до момента):** Скриптови езици, предназначени за бързо разработване и уеб програмиране. Примери: Python, JavaScript, Ruby8. Често интерпретиран вместо компилиран. **Класификация въз основа на програмната парадигма:** ○ **Процедурно (императивно) програмиране:** Изпълнението на програмата следва последователност от стъпки (инструкции). Този традиционен стил разделя задачите на по-малки процедури9. Примери: Pascal, C, Ada. ○ **Функционално програмиране:** Фокусира се върху функциите и техните оценки. Функциите са първокласни граждани, което означава, че могат да бъдат предавани като аргументи10. Примери: Lisp, Miranda, Haskell. ○ **Логическо (декларативно) програмиране:** Програмите се изразяват като логически твърдения (факти и правила). Изпълнението включва доказване или опровергаване на цели въз основа на тези твърдения. Примери: Prolog, OPS5. ○ **Обектно-ориентирано програмиране:** Програмите са организирани около обекти, капсулиращи данни и поведение. Примери: Smalltalk, Eiffel, Java, C++. **Езици за описание на уеб страницата:** ○ **HTML:** HyperText Markup Language се използва за структуриране на съдържание на уеб страници. ○ **XML:** Extensible Markup Language се използва за структуриране и форматиране на данни. За разлика от HTML, XML не е предназначен да бъде заменен от HTML и се фокусира върху съхранението на данни. **III. Описване на семантиката на език за програмиране** **Три общи подхода:** ○ **Използване на естествен език:** Потенциално двусмислено и неточно. ○ **Формална дефиниция:** Използва математическа нотация и логика, за да дефинира стриктно значението на езика, но може да бъде сложно. ○ **Оперативна семантика:** Описва значението на програмните конструкции чрез техните стъпки за изпълнение на абстрактна машина, по-интуитивна от формалната дефиниция. **IV. Описание на синтаксиса на език за програмиране** **Синтактичните правила са строг набор от правила, необходими за ефективността на програмата**. **Тези правила трябва да бъдат разбираеми както от компютъра, така и от хората, които пишат код**. **Общи методи:** ○ **Граматики без контекст:** Използвайте набор от производствени правила, за да дефинирате валиден синтаксис. ○ **Форма на Backus-Naur (BNF):** Нотация за писане на контекстно-свободни граматики, предлагаща компактен начин за изразяване на синтактични правила. ○ **Синтактични диаграми:** Графично представяне на синтактични правила за лесно визуализиране и разбиране. **V. Превод на езици за програмиране** **Процес:** Превод на езикова програма от високо ниво в изпълнима форма, разбираема от компютъра. **Видове преводачи:** ○ **Компилатори:** Превеждат цялата програма в машинен код преди изпълнение, което обикновено води до по-бързо изпълнение на програмата, но изисква отделна стъпка на компилиране. ○ **Преводачи:** Превеждайте и изпълнявайте програмата ред по ред, предлагайки по-интерактивна среда за разработка, но потенциално по-бавно изпълнение. **Процесът на превод изисква изходният код (език от високо ниво) да бъде преведен на нещо, което машината може да разбере**. **Това се прави с програма за преводач, която може да бъде или компилатор, или интерпретатор**. **VI. Програмиране и програмни грешки** **Стъпки, включени в програмирането:** ○ Написване на програмата в текстов редактор. ○ Превеждане на програмата в изпълним код (компилация или интерпретация). ○ Изпълнение на програмата с входни данни. ○ Анализиране на изхода и коригиране на грешки. **Видове програмни грешки:** ○ **Синтактични грешки:** Нарушения на синтаксичните правила на езика, открити по време на компилация. Например неправилни декларации на променливи. ○ **Семантични грешки:** Неправилни интерпретации на семантиката на езика, открити по време на изпълнение. Например използване на неправилен оператор. ○ **Логически грешки:** Грешки в логиката на програмата, водещи до неправилни резултати. Тези грешки произтичат от погрешна логика в това как трябва да функционира програмата. **VII. Системи клиент-сървър** **Определение:** Системи, при които софтуерни компоненти (клиенти и сървъри) взаимодействат, за да предоставят услуги. **Модел клиент-сървър в програмирането:** Клиентските програми изискват услуги от сървърни програми. **Пример:** DNS сървър, предоставящ IP адреси за имена на домейни. В този модел DNS сървърът действа като сървър, предоставяйки услугата за превод на имена на домейни в IP адреси, докато клиентът (вашият компютър) изисква тези преводи. **VIII. Световната мрежа (WWW)** **История и принципи:** Разработено в CERN, базирано на хипертекст и интернет. Това позволи документите да бъдат свързани заедно, образувайки „мрежа" от взаимосвързана информация. **Структура:** Състои се от взаимосвързани уеб страници, съдържащи хипервръзки към други страници. Тази структура създава навигационна мрежа от информация. **Стандарти:** HTML, XML, CSS, JavaScript, DOM. Тези стандарти гарантират, че уеб страниците се показват правилно и последователно в различни браузъри и устройства. **IX. Уеб-клиент и уеб-сървър** **Уеб сървър:** Софтуер, който управлява и обслужва уеб страници. Популярните уеб сървъри включват Apache и NGINX. **Уеб клиент (браузър):** Софтуер, позволяващ на потребителите достъп и преглеждане на уеб страници. Примерите включват Internet Explorer, Mozilla Firefox, Chrome, Opera, Safari. **HTTP:** Основният комуникационен протокол между уеб клиенти и сървъри. Той управлява как уеб страници и други ресурси се заявяват и предават между клиента и сървъра. **Видове уеб браузъри:** Internet Explorer, Mozilla Firefox, Chrome, Opera, Safari. **Значение на уеб стандартите:** Осигурете съвместимост и оперативна съвместимост в различни браузъри. Това означава, че уеб страниците трябва да изглеждат и функционират по един и същи начин, независимо кой браузър използва потребителят. **X. Инструменти и езици за уеб разработка** **Инструменти за създаване на уеб страници:** ○ Текстови редактори (Notepad, UltraEdit, Notepad++). Те предлагат основен начин за писане и редактиране на HTML, CSS и JavaScript код. ○ WYSIWYG HTML редактори (Microsoft Expression Web, Adobe Dreamweaver). Те осигуряват визуален интерфейс за проектиране на уеб страници, без да е необходимо да пишете код директно. **Видове езици за уеб програмиране:** ○ **От страна на клиента:** JavaScript. JavaScript кодът се изпълнява в уеб браузъра на потребителя, позволявайки интерактивни елементи и динамични актуализации на съдържанието на уеб страницата. ○ **От страна на сървъра:** PHP, Python, Ruby. Кодът от страната на сървъра се изпълнява на уеб сървъра и е отговорен за генерирането на динамично съдържание, обработката на въведените от потребителя данни и взаимодействието с бази данни. **XI. Цели и ресурси на курса** **Цел:** Разработване на клиентски уеб приложения с помощта на HTML, CSS и JavaScript. Целта е да ви позволи да създавате интерактивни и отзивчиви уеб страници, които реагират на потребителските взаимодействия. **Ключови ресурси:** ○ W3Schools. ○ Уроци по уеб дизайн/HTML. ○ Преносим Notepad++. **XII. Допълнителни понятия** **Типове MIME:** Типовете MIME (многофункционално разширение за интернет поща) се използват за идентифициране на типа съдържание, което се изпраща по интернет. Тази информация помага на уеб браузъра да обработва правилно съдържанието. Например MIME тип \"text/html\" показва HTML документ, докато \"image/jpeg\" показва JPEG изображение. Този разширен учебен план обхваща всички ключови концепции от изходния материал. Като изучавате тези теми, трябва да сте добре подготвени за вашия тест.