I
Immortal Nephi
A programmer designs one interface and tens or hundreds
implementations. They do not need to use inheritance hierarchy and
polymorphism for critical performance reasons. They only need
encapsulation and hiding information. You can link or plug Interface
object to inheritance hierarchy as long as you wish.
One class is called CInterface in header file. Some implementations
are in multiple source code files. Multiple source code files help to
be readable for the programmers so they don’t have to scroll down over
50,000 lines!!
One problem is on header file because CInterface class contains
hundreds or thousands member functions on over 50,000 lines or more.
The best practice is to break large code into smaller codes. Some
sub-member functions have small codes and one main member function
contains some sub-member functions.
My question is – how can one big class break into smaller sub-
classes. One sub-class is in each header file. All multiple header
files and source code files are hidden from the programmer.
The programmer can only use to include Interface.h if they want to
create one or more objects. They only need to use Run() member
function. The Run() member function does its own job to process
hundreds variables and member functions inside hiding information.
Let me give you an example of my code below. It may give you an idea
what it looks like. It can be CPU Emulator, Robot with hundreds
commands, game solver, etc...
The training C++ book makes a note. You can use STL first. If it
does not meet your requirement, then you can go ahead to write your
own codes for critical performance reasons.
Sometimes, critical performance tries to avoid complex logic and you
only need to write sequence order in each sub-member function.
Please let me know how you can break large class into sub-classes for
readability.
#ifndef __INTERFACE_H__
#define __INTERFACE_H__
class CInterface
{
public:
static bool stop_running;
CInterface() {}
~CInterface() {}
void Run() {}
private:
void Implementation_1();
void Implementation_2();
// ...
// ...
void Implementation_1000();
int variable_1;
int variable_2;
// ...
// ...
int variable_100;
};
bool CInterface::stop_running = false;
#endif // __INTERFACE_H__
// __BEGIN__IMPLEMENTATION_A_CPP__
#include "Interface.h"
void CInterface::Implementation_1() {}
// ...
// ...
void CInterface::Implementation_100() {}
// __END__IMPLEMENTATION_A_CPP__
// __BEGIN__IMPLEMENTATION_B_CPP__
#include "Interface.h"
void CInterface::Implementation_101() {}
// ...
// ...
void CInterface::Implementation_200() {}
// __END__IMPLEMENTATION_B_CPP__
// __BEGIN__IMPLEMENTATION_C_CPP__
#include "Interface.h"
void CInterface::Implementation_201() {}
// ...
// ...
void CInterface::Implementation_300() {}
// __END__IMPLEMENTATION_C_CPP__
// __BEGIN__MAIN_CPP__
#include "Interface.h"
int main()
{
CInterface interfaces[4];
int each_process = 0;
do
{
interfaces[each_process++].Run();
each_process &= 0x3;
}
while (CInterface::stop_running != true);
return 0;
}
// __END__MAIN_CPP__
implementations. They do not need to use inheritance hierarchy and
polymorphism for critical performance reasons. They only need
encapsulation and hiding information. You can link or plug Interface
object to inheritance hierarchy as long as you wish.
One class is called CInterface in header file. Some implementations
are in multiple source code files. Multiple source code files help to
be readable for the programmers so they don’t have to scroll down over
50,000 lines!!
One problem is on header file because CInterface class contains
hundreds or thousands member functions on over 50,000 lines or more.
The best practice is to break large code into smaller codes. Some
sub-member functions have small codes and one main member function
contains some sub-member functions.
My question is – how can one big class break into smaller sub-
classes. One sub-class is in each header file. All multiple header
files and source code files are hidden from the programmer.
The programmer can only use to include Interface.h if they want to
create one or more objects. They only need to use Run() member
function. The Run() member function does its own job to process
hundreds variables and member functions inside hiding information.
Let me give you an example of my code below. It may give you an idea
what it looks like. It can be CPU Emulator, Robot with hundreds
commands, game solver, etc...
The training C++ book makes a note. You can use STL first. If it
does not meet your requirement, then you can go ahead to write your
own codes for critical performance reasons.
Sometimes, critical performance tries to avoid complex logic and you
only need to write sequence order in each sub-member function.
Please let me know how you can break large class into sub-classes for
readability.
#ifndef __INTERFACE_H__
#define __INTERFACE_H__
class CInterface
{
public:
static bool stop_running;
CInterface() {}
~CInterface() {}
void Run() {}
private:
void Implementation_1();
void Implementation_2();
// ...
// ...
void Implementation_1000();
int variable_1;
int variable_2;
// ...
// ...
int variable_100;
};
bool CInterface::stop_running = false;
#endif // __INTERFACE_H__
// __BEGIN__IMPLEMENTATION_A_CPP__
#include "Interface.h"
void CInterface::Implementation_1() {}
// ...
// ...
void CInterface::Implementation_100() {}
// __END__IMPLEMENTATION_A_CPP__
// __BEGIN__IMPLEMENTATION_B_CPP__
#include "Interface.h"
void CInterface::Implementation_101() {}
// ...
// ...
void CInterface::Implementation_200() {}
// __END__IMPLEMENTATION_B_CPP__
// __BEGIN__IMPLEMENTATION_C_CPP__
#include "Interface.h"
void CInterface::Implementation_201() {}
// ...
// ...
void CInterface::Implementation_300() {}
// __END__IMPLEMENTATION_C_CPP__
// __BEGIN__MAIN_CPP__
#include "Interface.h"
int main()
{
CInterface interfaces[4];
int each_process = 0;
do
{
interfaces[each_process++].Run();
each_process &= 0x3;
}
while (CInterface::stop_running != true);
return 0;
}
// __END__MAIN_CPP__