Programmation structurelle ou POO

Bonne journée. Dans cet article, je veux montrer non pas ce qui est mieux structuré ou la programmation objet, mais comment écrire à la fois là et là. Et peut-être que cela servira de choix à ceux qui veulent juste commencer à programmer et ne savent pas quelle langue choisir et ce qui pourrait être plus pratique. J'ai pris C et JAVA comme exemple.



Je vais commencer par la première chose qui me vient à l'esprit. Cela ne semble pas être un modèle, mais parfois vous devez l'utiliser en POO. Tout d'abord, j'écris un exemple en java. Disons que nous devons créer une classe pour deux types d'implémentation. Par exemple, nous devons créer une classe pour se connecter au site via http et https. Ceci est un petit exemple, par exemple la même méthode peut être utilisée lorsque vous souhaitez dessiner pour Android dans Opengl 2.0 es et Opengl 3.0 es. Dans ce cas, il y aura plus de code, et si vous le faites de la manière que je vais donner, le code aura l'air normal. Mais cette méthode, bien sûr, n'a pas été inventée par moi, je l'ai moi-même lu dans le livre un jour. Et donc https et http. Pour ce faire, vous devez créer une interface. Et attribuez la classe requise à cette interface, en fonction du type de protocole. Je ne me souviens pas exactement, mais il me semble avoir lu quelque part que la POO définit le cerveau.Qu'il vous permet d'écrire un beau code compétent. Peut-être. Mais je ne programme presque pas en POO, et c'est pourquoi j'écris peut-être autant de code, et un vrai programmeur fera du code plus concis. Mais je veux vous montrer un exemple. Ceci est l'interface Java.



import java.net.*;
import java.io.*;

interface IProtocol {
	public void connect ( URL url );
	public URLConnection getConnection ( ) throws IOException;
}


Ici, nous déclarons deux fonctions, une pour la connexion et l'autre pour obtenir URLConnection. Maintenant, il y a deux classes pour que cela fonctionne.



import java.net.*;
import java.io.*;

public class Http implements IProtocol {
	public URL url;

	public void connect ( URL url ) {
		this.url = url;
	}

	public HttpURLConnection getConnection ( ) throws IOException {
		return ( HttpURLConnection ) url.openConnection( );
	}
}


import java.net.*;
import javax.net.ssl.*;
import java.io.*;

public class Https implements IProtocol {
	public URL url;

	public void connect ( URL url ) {
		this.url = url;
	}

	public HttpsURLConnection getConnection ( ) throws IOException {
		return ( HttpsURLConnection ) url.openConnection ( );
	}
}


La quantité de code dont vous avez besoin pour écrire dans connect et getConnection n'est pas importante. Par exemple, j'ai choisi un peu de code, mais ça peut être beaucoup, si par exemple Opengl es à programmer. Mais c'est pratique. Ainsi, la fonction principale demeure.



import java.net.*;
import java.io.*;

public class Main {
	public static void main ( String[] args ) {
		URL url = null;
		try {
			url = new URL ( "https://www.google.com" );
		} catch ( MalformedURLException e ) {
			return;
		}

		String protocol = url.getProtocol ( );

		IProtocol prot = null;

		switch ( protocol ) {
			case "http": prot = new Http ( ); break;
			case "https": prot = new Https ( ); break;
			default: return;
		}

		prot.connect ( url );

		URLConnection conn = null;
		try {
			conn = prot.getConnection ( );
		} catch ( IOException e ) {
			return;
		}

		conn.setDoOutput ( true );

	}
}


En C, vous pouvez utiliser curl et ne pas écrire beaucoup de code, mais comment cet exemple pourrait-il être résolu en utilisant C? C a des pointeurs - c'est sa puissance. Et voici un exemple en C - la fonction principale.



fichier main.c

#include <stdio.h>
#include "conn.h"

struct conn conn;

#define HTTP_PROTOCOL       1
#define HTTPS_PROTOCOL      2
#define ERROR_PROTOCOL     -1

static int get_protocol ( void ) {
	return HTTP_PROTOCOL;
}

int main ( int argc, char **argv ) {

	switch ( get_protocol ( ) ) {
		case HTTP_PROTOCOL: init_http ( &conn ); break;
		case HTTPS_PROTOCOL: init_https ( &conn ); break;
		case ERROR_PROTOCOL: return -1;
	}

	conn.connect ( "www.google.com" );
	char *data = conn.read ( );
}


La structure conn est déclarée dans un autre fichier.



fichier conn.h

#ifndef __CONN__
#define __CONN__
struct conn {
	void ( *connect ) ( const char *url );
	char *( *read ) ( void );
};

void init_http ( struct conn *conn );
void init_https ( struct conn *conn );
#endif


Il y a tout un fichier de portée alloué pour init_http, qui est nécessaire pour http.



fichier http.c

#include "conn.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>

static int sockfd;

static void connect_http ( const char *url ) {
	sockfd = socket ( AF_INET, SOCK_STREAM, 0 );
}

static char *read_http ( void ) {
	return NULL;
}

void init_http ( struct conn *conn ) {
	conn->connect = connect_http;
	conn->read = read_http;
}


Ssl est également requis pour init_https. Par conséquent, ce fichier contiendra toutes les données nécessaires à cette connexion.



fichier https.c

#include "conn.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <openssl/ssl.h>
#include <stdio.h>

static int sockfd;
static SSL *ssl;

static void connect_https ( const char *url ) {
	sockfd = socket ( AF_INET, SOCK_STREAM, 0 );
}

static char *read_https ( void ) {
	return NULL;
}

void init_https ( struct conn *conn ) {
	conn->connect = connect_https;
	conn->read = read_https;
}


Si vous aimez l'article, j'écrirai une suite dans le futur. Pour l'instant, je ne connais probablement pas assez bien la POO pour écrire plus d'exemples, mais je pense que si je n'abandonne pas la POO, alors les lecteurs débutants seront intéressés de voir les différences lors de l'écriture en programmation structurée et POO.



All Articles