Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Data encapsulation ...!

Posted on 2000-05-14
8
Medium Priority
?
300 Views
Last Modified: 2012-05-04
Can we write a program to get the facility of 'Data encapsulation' (one of the oop concept) in 'C' language ?
0
Comment
Question by:natarajfromiisc
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
8 Comments
 
LVL 84

Expert Comment

by:ozo
ID: 2809460
What data do you want to encapsulate?
0
 
LVL 12

Expert Comment

by:pjknibbs
ID: 2809595
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
 
LVL 10

Expert Comment

by:makerp
ID: 2809788
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!

 
LVL 1

Expert Comment

by:patoury
ID: 2810308
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
 
LVL 4

Expert Comment

by:abancroft
ID: 2814583
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
 
LVL 3

Expert Comment

by:matth012098
ID: 2823918
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
 

Accepted Solution

by:
wraith0 earned 300 total points
ID: 2831229
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
 

Author Comment

by:natarajfromiisc
ID: 2842093
Thanks alot, it is working fine
0

Featured Post

Industry Leaders: 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!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ou…
Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
The goal of this video is to provide viewers with basic examples to understand opening and writing to files in the C programming language.
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.

610 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question