Введение в понимание программирования ;)

Привет пикабушникам!


В честь нового года решил сделать обзорную статью по программированию и языках программирования. Профессиональным программистам просьба не пинать т.к. пишется в стиле «не для специалистов».


Если будет непонятно – не расстраивайтесь. Очень многие профессиональные программисты так же ничего в этом не понимают (что не мешает им эффективно работать).


Итак, КО мог бы сказать, что язык программирования — формальная знаковая система, предназначенная для записи компьютерных программ. Для того чтобы понять что такое язык программирования нужно понять, что такое… Инструкция.


Многие сталкивались в жизни с различными инструкциями и руководствами, так вот для понимания сути вопроса – программа, это инструкция или руководство для вычислительной машины (в частности компьютера).


Рассмотрим простую инструкцию – она написана на каком-либо языке, содержит разделы, приложения и имеет определенную структуру и стиль.


Структура и стиль инструкции в программировании называется парадигмой.

Разделы инструкции в программировании называют функциями.

Язык инструкции – язык программирования.


Основные парадигмы программирования:


Класс декларативного программирования – это класс парадигм которые вместо алгоритма описывают результат который требуется получить. Представители класса:


Чисто декларативное программирование, кстати, не всеми программистами считается программированием. Это такие языки как SQL, HTML. Кто видел код тот поймет почему программисты так считают. «Код» не обладает всеми возможностями языка программирования и является простым описанием требуемого результата.


Логическое программирование – программирование на основе фактов и моделей связи между фактами. Единственный вменяемый представитель: Prolog


Функциональное программирование – для использования программирования используется стиль математических операций. Если не знакомы с дискретной математикой, то ничего не понятно от слова совсем. Представители этой парадигмы: LISP, Erlang, Scala, Miranda, Haskell.

Пример программы (Hello World) на LISP:

(format t "Hello, world!~%")

Пример чуть сложнее:

(defun fibonacci (n)

           (loop repeat n

                    for a = 0 then b

                    and for b = 1 then (+ a b)

                    finally (return b)))


Класс императивного программирования – программирование которое заключается в написании однозначной инструкции для компьютера на выполнение порядка действий. В этот класс входят:


Процедурное программирование – классическое программирование, т.е. инструкция для вычислительной машины в чистом виде. Языков великое множество, наиболее известные С и С++.


Пример программы (С++):


#include <iostream>


int main()

{

std::cout << "Hello, world!\n";

return 0;

}


Стековое программирование – программирование на основе принципа стека. На русском звучит так: «Последний пришел-первый вышел», в результате родилась шутка:

Тайна речи магистра Йоды открыта:

Старым программистом на Форте он был…


Пример программы на Форте:


\ Напечатать знак числа

: .SIGN ( n -- )

            ?DUP 0= IF

                  ." НОЛЬ"

            ELSE

                 0> IF

                      ." ПОЛОЖИТЕЛЬНОЕ ЧИСЛО" ELSE

                      ." ОТРИЦАТЕЛЬНОЕ ЧИСЛО" THEN

            THEN

;


Объектно-ориентированное программирование (ООП) – как следует из названия программирование на основе объектов которые являются экземплярами классов. Является важной опцией языков программирвоания.


В ООП производятся операции со свойствами экземпляров классов путем выполнения методов. Методы – набор инструкций по изменению классов.


Основной концепцией ООП является система ООП на классах:


Чтобы понятно перевести это на русский давайте посмотрим на домашних животных. Возьмем кота Ваську и собаку Жучку.

У всех животных есть общие черты, значит корневой класс будет «животные», кошка и собака относятся к млекопитающим, подкласс «млекопитающие», Васька – кот, а Жучка - собака, но они не являются «родственниками». Поэтому у нас будут 2 подкласса «Собаки» и «Коты». Итоговая структура классов:

Класс Животные

Свойство: живет

Метод: размножается

Метод: питается

Метод: умирает

Класс Млекопитающие, наследует класс Животные

Свойство: кормит молоком детенышей

Класс Собака, наследует класс Млекопитающие

Свойство: лает

Класс Кот, наследует класс Млекопитающие

Свойство: мурчит

И теперь пример

Васька – экземпляр класса Кот

Жучка – экземпляр класса Собака


Жучка и Васька могут иметь свойства: живет (от Животных), кормить молоком (от Млекопитающих), а так же могут: питаться, размножатся, умирать.

Но Жучка может лаять и не может мурчать, а Васька может мурчать, но не может лаять поскольку их «фирменные» классы не содержат соответствующих свойств.


Помимо классов есть программирование основанное на прототипах. В этом случае отсутствует описание класса, оно выводится в момент написания программы. Язык программирования для примера: JavaScript.


Является парадигмой программирования, но не является определяющим для языка программирования:


Структурное программирование – оформление программы так чтобы она легко читалась и понималась другими программистами. То есть это простой и понятный стиль написание программы. Язык, который частично заставляет это делать, Python.


«Чистых» языков программирования (которые бы использовали только одну парадигму) не существует, каждый язык отражает в себе одну или несколько парадигм.


Если тема будет интересна то напишу обзоры для Perl, Python, C++, JavaScript, Prolog, SQL, HTML+CSS.


Всех с наступающим праздником! Счастья, здоровья, удачи!