Ծրագրավորման 3 հիմնական պարադիգմները, որոնք դուք պետք է իմանաք
Ծրագրավորման լեզուները բարդ գազաններ են։ Նրանք ոչ միայն կարող են շատ տարբեր տեսք ունենալ, այլև դրանց ամբողջ գործառնական մոդելները կարող են սկզբունքորեն տարբեր լինել:
Ծրագրավորման պարադիգմները տեսություններ կամ գաղափարներ են, որոնք օգնում են ձևավորել տարբեր լեզուները, որոնք դուք օգտագործում եք ծրագրակազմ ստեղծելու համար: Նրանք ներկայացնում են ծրագրավորման լեզվի հիմնական բնութագրերը՝ թելադրելով նրա վարքագիծը: Հետևաբար, կարելի է վստահորեն ասել, որ պարադիգմը նույնքան կարևոր է, որքան ծրագրավորման լեզվի շարահյուսությունը և իմաստաբանությունը: Ծրագրավորման ամենատարածված լեզուները օգտագործում են ծրագրավորման պարադիգմների մի քանի տեսակներից մեկը:
1. Իմպերատիվ ծրագրավորում
Իմպերատիվ պարադիգմը ծրագրավորման ամենավաղ մոտեցումներից մեկն է, որը գնում է դեռևս 1950-ականներին: Այս պարադիգմը մեծապես հիմնված է փոփոխականների, հրամանների և ընթացակարգերի օգտագործման վրա: Իմպերատիվ ծրագրավորումն օգտագործում է հրամաններ փոփոխականները ստուգելու և թարմացնելու համար՝ պահպանելով վիճակը ծրագրում: Հրամանների համակցությունն այնուհետև ստեղծում է ընթացակարգ: Տվյալների աբստրակցիան վճռորոշ դեր է խաղում տվյալների ներկայացման մեջ, ինչը հեշտացնում է չամրացված միացումը: Ամենահայտնի լեզուներից մեկը, որն օգտագործում է հրամայական պարադիգմը, C-ն է: Ծրագրավորման այս լեզուն աջակցում է միայն գործառույթների ընթացակարգերին:
Իմպերատիվ ծրագրի օրինակ
#include <stdio.h>
#include <string.h>
struct Customer
{
int CustomerId;
char OrderNumber[20];
char Name[30];
float OrderTotal;
};
void main ()
{
struct Customer John = {4000, "HK1001", "John Doe", 200.00};
struct Customer Jane = {4001, "HK1002", "Jane Doe", 600.00};
memcpy(Jane.Name , "Jane Jones", 10);
printf ("The total cost for %s order number %s is: $%.2f",Jane.Name, Jane.OrderNumber, Jane.OrderTotal);
}
Վերևի C ծրագիրը ստեղծում է Հաճախորդ կառուցվածք: struct տեսակը տվյալների վերացման հիմնական օրինակն է C-ում: Ծրագիրը ցույց է տալիս, թե ինչպես հրամանները կարող են ստեղծել, թարմացնել և ցուցադրել վիճակը՝ Jane կառուցվածքային փոփոխականի միջոցով: Այս բոլոր հրամանները գտնվում են main() ֆունկցիայի մեջ, որն ընդհանուր առմամբ ընթացակարգ է, որը նշում է, թե հաճախորդը որքան գումար պետք է վճարի պատվերի համար: Վերը նշված ծրագրի գործարկումը ձեր վահանակում կստեղծի հետևյալ ելքը.
The total cost for Jane Jones order number HK1002 is: $600.00
2. Օբյեկտ-կողմնորոշված ծրագրավորում
Օբյեկտ-կողմնորոշված ծրագրավորման պարադիգմը տարածվեց 1990-ականներին: Այս պարադիգմը հրամայականի հետնորդն է: Այնուամենայնիվ, օբյեկտի վրա հիմնված պարադիգմը պահում է վիճակը օբյեկտներում և ոչ փոփոխականներում: Ծրագրավորման լեզուները, որոնք օգտագործում են օբյեկտի վրա հիմնված պարադիգմը, հաճախ ավելի լավ են մշակում բարդ ծրագրերը: Պարադիգմայի հիմնական առանձնահատկություններն են օբյեկտները, դասերը, տվյալների ամփոփումը, ժառանգականությունը և պոլիմորֆիզմը: Դասը օբյեկտ-կողմնորոշված ծրագրի հիմնական բաղադրիչն է: Որոշ դասեր ժառանգում են հատկություններ և գործողություններ այլ դասերից: Ծրագրավորողները սա նկարագրում են որպես ծնող-երեխա հարաբերություն: Այն ընկնում է ենթատեսակի պոլիմորֆիզմի կատեգորիայի տակ։ Դասերը պարունակում են գործիքներ՝ թաքցնելու և պաշտպանելու զգայուն տվյալները ինկապսուլյացիայի միջոցով: Երբ դուք սահմանել եք դաս, այնուհետև կարող եք օգտագործել այն օբյեկտներ ստեղծելու համար: Առավել հայտնի ծրագրավորման լեզուներից երեքը, որոնք օգտագործում են օբյեկտի վրա հիմնված պարադիգմը, Java-ն, C++-ը և Python-ն են:
Օբյեկտ-կողմնորոշված ծրագրի օրինակ
Այս հավելվածը ցուցադրում է օբյեկտ-կողմնորոշված ծրագրավորման լեզվի՝ Java-ի առանձնահատկությունների մեծ մասը: Հաճախորդի հատուկ տեսակը ժառանգում է վարքագիծը ավելի ընդհանուր տեսակից: Բոլոր հաճախորդներն իրականացնում են ինտերֆեյս: Հաճախորդի հատուկ տեսակը շրջում է ինտերֆեյսի մեթոդը:
Discountable.java ֆայլը
public interface Discountable {
public void grandTotal(String orderNumber, double total);
}
Վերոնշյալ կոդը ստեղծում է ինտերֆեյս: Java-ում ինտերֆեյսը պոլիմորֆիզմի ևս մեկ օրինակ է: Այն թույլ է տալիս սուբյեկտներին, որոնք ուղղակիորեն կապված չեն, մուտք գործելու նույն հատկությունները, ինչպիսին է grandTotal մեթոդը: Այս հավելվածը կենտրոնանում է հաճախորդների վրա, սակայն աշխատողների դասը կարող է օգտագործել նաև Զեղչված ինտերֆեյսի համար:
Customer.java ֆայլը
public class Customer implements Discountable {
protected int customerId;
protected String customerName;
protected String customerCode;
public Customer() {
this.customerId = 0;
this.customerName = "";
this.customerCode = "";
}
public Customer(int customerId, String customerName, String customerCode) {
this.customerId = customerId;
this.customerName = customerName;
this.customerCode = customerCode;
}
public int getCustomerId() {
return customerId;
}
public void setCustomerId(int customerId) {
this.customerId = customerId;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getCustomerCode() {
return customerCode;
}
public void setCustomerCode(String customerCode) {
this.customerCode = customerCode;
}
public double customerType(String customerCode) {
double discount = 0;
if (customerCode.toLowerCase().equals("pre")) {
discount = 0.10;
} else if (customerCode.toLowerCase().equals("gen")) {
discount = 0.02;
} else if (customerCode.toLowerCase().equals("new")) {
discount = 0.05;
}
return discount;
}
@Override
public void grandTotal(String orderNumber, double total) {
double discount = customerType(customerCode);
double discountPercentage = total * discount;
double finalTotal = total - discountPercentage;
System.out.println("For " + getCustomerName()
+ " order Number " + orderNumber + " the grand total is: $" + finalTotal);
}
}
Վերևի կոդը ստեղծում է Հաճախորդ դաս: Այն իրականացնում է Զեղչելի ինտերֆեյսը, այնուհետև օգտագործում է իր մեթոդը՝ հաշվելու և ցուցադրելու ընդհանուր գումարը՝ հիմնված հաճախորդի կատեգորիայի վրա: Վերևի կոդի պաշտպանված հիմնաբառը տվյալների ամփոփման օրինակ է. այն սահմանափակում է այս դասի միջոցով ստեղծված տվյալների հասանելիությունը: Այսպիսով, Հաճախորդ դասի միայն ենթադասերին (կամ երեխաների դասերին) հասանելի կլինեն նրա տվյալները:
NewCustomer.java ֆայլը
<strong>public</strong> <strong>class</strong> NewCustomer <strong>extends</strong> Customer {
<strong>public</strong> NewCustomer() {
<strong>super</strong>();
}
<strong>public</strong> NewCustomer(<strong>int</strong> customerId, String customerName, String customerCode) {
<strong>super</strong>(customerId, customerName, customerCode);
}
}
Վերևի կոդը ստեղծում է NewCustomer դաս, որը ընդլայնում է Customer դասը: Այս Java դասը օգտագործում է ժառանգությունը՝ ներկայացնելու ծնող-երեխա հարաբերությունը Հաճախորդ դասի հետ: Նոր Հաճախորդը հարաբերությունների մեջ գտնվող երեխա է, ուստի այն հասանելի է Հաճախորդների դասի բոլոր հատկություններին: Այն ներմուծում է Հաճախորդների դասի ատրիբուտները՝ օգտագործելով super() մեթոդը:
App.java ֆայլը
<strong>public</strong> <strong>class</strong> App {
<strong>public</strong> <strong>static</strong> <strong>void</strong> main(String[] args) {
Customer Jane = <strong>new</strong> NewCustomer(4001, "Jane Jones", "new");
Jane.grandTotal("HK1002", 600);
}
}
Վերևի կոդը ստեղծում է App գործարկվող դաս: Այս դասը ստեղծում է Հաճախորդի օբյեկտ (Ջեյն) և պոլիմորֆիզմի միջոցով Ջեյնին դարձնում է Նոր Հաճախորդ: Վերջապես, այն առաջացնում է Ջեյնի պատվերի ընդհանուր գումարը: Վերը նշված ծրագրի գործարկումը վահանակում կստեղծի հետևյալ ելքը.
For Jane Jones order Number HK1002 the grand total is: $570.0
3. Ֆունկցիոնալ ծրագրավորում
Այս պարադիգմայի հիմնական հասկացություններն են արտահայտությունները, ֆունկցիաները, պարամետրային պոլիմորֆիզմը և տվյալների աբստրակցիան: Արտահայտությունները ֆունկցիոնալ ծրագրավորման լեզուների կողմից օգտագործվող գործառույթների հիմնական բաղադրիչներն են: Պարամետրիկ պոլիմորֆիզմը պոլիմորֆիզմի երեք տեսակներից մեկն է։ Այս տեսակը հեշտացնում է ընդհանուր ծրագրավորումը գործառույթների և տեսակների միջոցով: JavaScript-ը ֆունկցիոնալ ծրագրավորման ամենատարածված լեզուներից մեկն է:
Ֆունկցիոնալ ծրագրի օրինակ
const Customer = {
IdNumber: 1002,
Name: 'Jane Jones',
CustomerCode: 'new'
}
const main = (customer, func, value) => {
var total = func.apply(null, [ customer.CustomerCode, value ]);
console.log(`${customer.Name} total is: ${total}`);
}
const grandTotal = (CustomerCode, total) => {
if (CustomerCode == "new") {
discount = total * 0.05;
mainTotal = total - discount;
return mainTotal;
} else if (CustomerCode == "pre") {
discount = total * 0.10;
mainTotal = total - discount;
return mainTotal;
}
}
main(Customer, grandTotal, 600);
Վերևի JavaScript ծրագիրը ունի առարկայական բառացի և երկու գործառույթ: Այն հայտարարում է ֆունկցիաներից յուրաքանչյուրը որպես արտահայտություն՝ օգտագործելով JavaScript սլաք ֆունկցիան։ main() ֆունկցիան ավելի բարձր կարգի ֆունկցիա է: Այն ընդունում է grandTotal ֆունկցիան որպես իր արգումենտներից մեկը, այնուհետև կանչում է այդ ֆունկցիան։ Սա նաև պարամետրային պոլիմորֆիզմի օրինակ է։ grandTotal() ֆունկցիան պարունակում է մի քանի արտահայտություններ, իսկ Հաճախորդ օբյեկտը տվյալների վերացման օրինակ է: Վերոնշյալ ծրագիրը վահանակում ստեղծում է հետևյալ ելքը.
Jane Jones total is: $570
Ծրագրավորման լեզուների բարդությունը
Ծրագրավորման լեզուն կարող է մարմնավորել մեկ ծրագրավորման պարադիգմի հասկացությունները, բայց դա չի նշանակում, որ այն սահմանափակվում է մեկ պարադիգմով: Ծրագրավորման հայտնի լեզուներից շատերը (ինչպիսիք են Python-ը, Java-ն, JavaScript-ը և C++-ը) բազմակողմանի պարադիգմային լեզուներ են: Ծրագրավորման որոշ պարադիգմներ, ինչպիսիք են հրամայականը և օբյեկտին կողմնորոշված պարադիգմները, նույնպես կապված են: Բայց չնայած այս ազգակցական կապին, կան որոշ էական տարբերություններ: