Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 302
  • Last Modified:

Data encapsulation ...!

Can we write a program to get the facility of 'Data encapsulation' (one of the oop concept) in 'C' language ?
0
natarajfromiisc
Asked:
natarajfromiisc
1 Solution
 
ozoCommented:
What data do you want to encapsulate?
0
 
pjknibbsCommented:
Data encapsulation is a concept, as you rightly say, so it can be implemented to some degree in *any* language. For instance, whenever you use a STATIC variable in a function or .C file, you're effectively encapsulating the variable; only code with its local execution unit can access it.
0
 
makerpCommented:
use C++ or java, and use the class constructs to achive proper encapsulation of data and methods.
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
patouryCommented:
If I understand well you want to write in object with a non-object language.
I ve already done that for a while when I didn t know about C++.
The encapsulation means that you want to control which object are calling functions and which properties are used for such or such objects.
So you can follow the following rules:

1)Create your objects as structures

2)Objects function in your case must control the objects by whitch they were called.
3) functions must always get in first parameter the caller object

Have fun.
Patoury.
0
 
abancroftCommented:
You need to use an Abstract Data Type. This can be implemented in C using opaque pointers (void *).

e.g.
In public header file (ADT.h)

typedef void * HADT; /* HADT is a handle to an ADT */

HADT CreateADT(void);
void DestroyADT(HADT hADT);

In private C file (ADT.c)

typedef struct {
  int m_n1;
  int m_n2;
} ADT, *PADT;

HADT CreateADT(void)
{
  PADT pRet = (PADT)malloc(sizeof(ADT));
  return (HADT)memset(pRet, NULL, sizeof(ADT));
}
void DestroyADT(HADT hADT)
{
  free(hADT);
}

Now all access/manipulation of ADT structs has to be done through the opaque pointer (HADT). Obviously you'll need to add other functions so clients can manipulate HADT's.
0
 
matth012098Commented:
Hi

  Data encapsulation can be achieved using typedef structures:

typedef struct {
    int a;
    int b;
    int c;
} ENCAPSULATED_DATA;


However in its simpist form cannot fully support public, private, protected or methods etc, etc, ect......

NB. You could support methods by way of function pointers using some kind of virtual table as with COM

I suppose you could implement this programmaticaly, but it would be much easier switching to C++ or if you arent too bothered anout speed then switch to Java (A most wonderful, pleasure to use language).

Matth


0
 
wraith0Commented:
This is about as close as I can get:

void Initialize(struct Object *pThis);
int GetXValue(struct Object *pThis);
void SetXValue(struct Object *pThis, int xNew);

struct Object
{
      int x;
      void (__cdecl *Initialize)(void *);
      int (__cdecl *GetXValue)(void *);
      void (__cdecl *SetXValue)(void *, int);
};
void Initialize(struct Object *pThis)
{
      pThis->x=0;
      pThis->GetXValue=&GetXValue;
      pThis->SetXValue=&SetXValue;
};
int GetXValue(struct Object *pThis)
{
      return pThis->x;
}
void SetXValue(struct Object *pThis, int xNew)
{
      pThis->x=xNew;
}
int main(int argc, char* argv[])
{
      struct Object myObject;
      myObject.Initialize=&Initialize;
      
      myObject.Initialize(&myObject);

      myObject.SetXValue(&myObject,4);

      printf("%i\n", myObject.GetXValue(&myObject));

      return 0;
}


Hope this helps.
0
 
natarajfromiiscAuthor Commented:
Thanks alot, it is working fine
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now