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

Изтрито е съдържание Добавено е съдържание
+2ш
м Bot: Automated text replacement (- , +,); козметични промени
Ред 11:
 
== Механизъм за скриване на информацията ==
Енкапсулацията може да се използва за да скрива полета и методи на даден клас. Според тази дефиниция, енкапсулиране означава, че вътрешното представяне на [[Обект (програмиране)|обект]] , не може да се види извън дадения обект. Като правило, само собствените методи на даден обект могат директно да виждат или променят поле. Някои езици, като [[smalltalk]] и [[Ruby|Руби]] позволяват достъп само чрез методите на обекта, но повечето от останалите езици (например, [[C++|С++]], [[C Sharp|С#]], [[Delphi (език за програмиране)|Делфи]] или [[Java]]) предлагат на програмиста степента на контрол над това, което е скрито, обикновено чрез ключови думи, както <code>public</code> , така и <code>private</code>. трябва да се отбележи, че ISO стандарт в C++ се отнася до <code>protected</code>, <code>private</code> и <code>public</code> , като „[[модификатори за достъп]]“, и че те не се „крият информация“. Скриването на информация се осъществява чрез предоставяне на крайната версия на изходния код, който се свързва чрез header([[Заглавен файл|загла]]<nowiki/>вен файл).
 
Почти винаги има начин да се заобиколи тази защита &#x2013; обикновено чрез рефлекшън (отражение) в API ([[Ruby]], [[Java]], [[C Sharp|C#]] и т.н.), понякога чрез механизъм, като изопачаване на името (name mangling) ([[python]]), или специални запазени думи като на <code>friend</code> в C++.
 
По-долу е даден пример на [[C Sharp|C#]] , който показва как достъпът до полето с данни може да бъде ограничен, чрез използване на запазената дума <code>private</code>:<source lang="csharp">
class Program {
public class Account {
Ред 111:
// Header file "api.h"
 
struct Entity; // Opaque structure with hidden members
 
// API functions that operate on 'Entity' objects
extern struct Entity * open_entity(int id);
extern int process_entity(struct Entity *info);
extern void close_entity(struct Entity *info);
</source>Ползвателите извикват API функции за алокиране, опериране върху тях и освобождаване на обекти от непрозрачен тип данни (opaque data type). Съдържанието на този тип са известни и са на разположение само за имплементацията на функциите на API-то, а ползвателите не могат директно да се обърнат към неговото съдържание. Изходният код за тези функции определя действителното съдържание на структурата:<source lang="csharp">
// Implementation file "api.c"
Ред 153:
== Връзки ==
<references />
 
[[Категория:Обектно-ориентирано програмиране]]