Енкапсулация (програмиране): Разлика между версии

Изтрито е съдържание Добавено е съдържание
м неправилно членуване - предлог и пълен член
Xqbot (беседа | приноси)
м Bot: Replace deprecated <source> tag and "enclose" parameter
Ред 15:
Почти винаги има начин да се заобиколи тази защита – обикновено чрез рефлекшън (отражение) в API ([[Ruby]], [[Java]], [[C Sharp|C#]] и т.н.), понякога чрез механизъм, като изопачаване на името (name mangling) ([[python]]), или специални запазени думи като на <code>friend</code> в C++.
 
По-долу е даден пример на [[C Sharp|C#]], който показва как достъпът до полето с данни може да бъде ограничен, чрез използване на запазената дума <code>private</code>:<sourcesyntaxhighlight lang="csharp">
class Program {
public class Account {
Ред 34:
}
}
</sourcesyntaxhighlight>По-долу е даден пример на Java:<sourcesyntaxhighlight lang="java">
 
public class Employee {
Ред 48:
}
}
</sourcesyntaxhighlight><sourcesyntaxhighlight lang="php">
class Account {
/**
Ред 108:
// Our code forbids us from withdrawing more than we have
$myAccount->withdraw(600.00); // Exception Message: Cannot withdraw $600 from account as it contains $505.79
</sourcesyntaxhighlight>Енкапсулацията също така може да се прилага в езици, които не са объектно-ориентирани. В [[C (език за програмиране)|C]], например, структурата може да бъде обявена в публично API (т.е. заглавен(header) файл) за набор от функции, които оперират върху елемент от данни, съдържащ полета на обекта, които не са достъпни за ползвателите на API:<sourcesyntaxhighlight lang="csharp">
// Header file "api.h"
 
Ред 117:
extern int process_entity(struct Entity *info);
extern void close_entity(struct Entity *info);
</sourcesyntaxhighlight>Ползвателите извикват API функции за алокиране, опериране върху тях и освобождаване на обекти от непрозрачен тип данни (opaque data type). Съдържанието на този тип са известни и са на разположение само за имплементацията на функциите на API-то, а ползвателите не могат директно да се обърнат към неговото съдържание. Изходният код за тези функции определя действителното съдържание на структурата:<sourcesyntaxhighlight lang="csharp">
// Implementation file "api.c"
 
Ред 138:
void close_entity(struct Entity *info)
{ ... }
</syntaxhighlight>
</source>
 
== Историческо значение ==