Método objetivo para analizar variables de instancia en lenguaje C
Descripción general
 Identifique la clase a la que se ha ejecutado la variable de instancia declarada con el tipo de id. Cuyo tipo se determina en el tiempo de ejecución sin ejecutar el programa. ] Describen un nombre de clase cuando se genera un objetivo-C en una nueva instancia, el uso de un alloc mensaje realizar único nuevo o región fijado para la realización de zona de sujeción y la inicialización, mediante la búsqueda del mensaje, las variables de instancia Puedes arreglar la clase. En el caso de utilizar una instancia generada en otra clase, y el análisis de una variable de instancia de mensaje puede aceptar, las variables de instancia mediante la limitación de los mensajes que pueden ser aceptados, localizar la clase se define el mensaje, o una subclase que clase También es posible estimar la clase a partir de la relación de herencia de la clase a la que pertenece cada mensaje si hay varios mensajes que pueden aceptarse.
Campo técnico
La presente invención llegará a ser importante cuando el cambio extendió existente programada en desarrollo de software, un método para el análisis de las variables de instancia en lenguaje objetivo-C es una técnica para el análisis el programa.
Antecedentes de la técnica
Describe el objeto orientado Orientada a objetos es una nueva forma de pensar en el desarrollo de software. Se posiciona como una metodología que cubre los procesos de desarrollo de software tales como análisis de sistemas → diseño → programación. En el fondo hay una demanda para realizar el mecanismo y la forma de pensar en el mundo real en el mundo de la informática tal como es. Un objeto que modela la figura del mundo real tal como es es un objeto, y las instancias de esa clase tienen propiedades comunes. Otras propiedades diferentes son propiedad de clases heredadas.
Es de notar que el objeto es una abstracción de un conjunto de clasificación de la entidad en el mundo real en un determinado punto de vista, la clase, para clasificar a una instancia en un cierto punto de vista, es una abstracción, y la instancia, es una entidad individual del mundo real, la herencia, el objeto es una instancia de la subclase, es un acto de heredar todo en las características dadas de la clase padre y la clase ancestro, casos en la relación de herencia, los atributos de la clase de los padres de Al mismo tiempo, también tiene atributos de esta subclase.
el lenguaje Objective-C es uno de los idiomas que están estandarizados, y declara variables de instancia de ficheros de inclusión y nombres de método, y un archivo de aplicación que describe el contenido de operación reales, tales como la transmisión y recepción de mensajes. Hay un tipo de identificación como función característica. Este es un tipo de puntero universal, y el objetivo C generalmente determina el tipo en tiempo de ejecución. Por lo tanto, en el momento de la actualización o la reutilización de los programas existentes no se pueden ejecutar este programa (por ejemplo, cuando la biblioteca de clases solamente) caso, cuando se ve desde el lado que para analizar el programa, el análisis de este tipo id es muy difícil.
Tenga en cuenta que las variables de instancia, valor que representa el estado de una instancia, un método, un procedimiento realizado por el objeto, el mensaje, que la respuesta se define en devuelve el método, el mensaje Se forma un objeto y se intercambian una solicitud de operación entre objetos y un resultado de operación.
Tarea de solución
Es necesario identificar sin ejecutar el programa una clase pertenece valor de una variable tiene este tipo de elementos de tipo ID o la lista presente en el programa en cuestión con el fin de volver a utilizar la biblioteca de clases. En otras palabras, si la clase de estas variables no se conoce, el comportamiento del objeto será desconocido. Esto es porque el tipo de identificación que el tipo en tiempo de ejecución cambia dinámicamente, es posible cambiar el contenido de la operación para cada local y hacer cambios en la posición con la otra mano que, también otras propiedades que el objeto se asocia Lo afecta Además, los elementos de List son lo mismo.
La presente invención se ha realizado en vista de lo anterior, es un objeto sin ejecutar un programa escrito en un lenguaje orientado a objetos objetivo-C, declaró Identificación del tipo tipo se determina en tiempo de ejecución Y para especificar la clase a la que pertenece la variable de instancia en el lenguaje Object-C.
Solución
Para lograr el objeto anterior, el método de análisis de la instancia de objetivo-C en las variables lingüísticas de la presente invención es un programa escrito en un lenguaje orientado a objeto objetivo-C, las variables de instancia declaradas en Tipo Tipo ID se determina en tiempo de ejecución Extraer una variable de instancia declarada con el tipo de id. De un archivo de encabezado de un programa de destino de análisis y extraer una implementación de la misma clase que el archivo de encabezado seleccione el archivo para detectar una descripción del mensaje para generar dicha variable de instancia en el archivo de implementación, si una descripción del mensaje es un lugar, la clase de la variable de instancia en la clase generada por el mensaje La descripción del mensaje se hace en una pluralidad de lugares Lever, identifica la clase de la variable de instancia de la clase que se creará en cada mensaje para cada punto, si la descripción del mensaje no puede ser encontrado, un mensaje que se recibe la variable de instancia en el archivo de implementación la detección de la descripción, si no hay descripción del mensaje, una clase particular determina imposible, si hay una descripción del mensaje, extrae la descripción del mensaje con el mismo nombre que el método en el archivo de cabecera, la si el tipo de mensaje es uno para identificar la clase de las variables de instancia en cualquiera de las subclases de la clase o la clase de la relación de herencia de la clase a la que se define el método, cualquier tipo del mensaje en una pluralidad , Marca todas las clases y sus subclases en las que se define el método, Si haga clic en las clases una para identificar la clase de las variables de instancia en cualquiera de las subclases de la clase o la clase de la relación de herencia de la clase, si es plural clase marcada, todos los métodos de marcado La clase de la variable de instancia se especifica en la clase que se heredará o en la subclase de la clase.
El método de análisis objetivo-C de las variables de instancia en el lenguaje de la presente invención, cuando se genera una nueva instancia en el objetivo-C, describe un nombre de clase, llamada alloc realizar único nuevo o región fijado para la realización de reserva área y la inicialización Al usar este mensaje, podemos determinar la clase de la variable de instancia al encontrar este mensaje. En el caso de utilizar una instancia generada en otra clase, y el análisis de una variable de instancia de mensaje puede aceptar, las variables de instancia mediante la limitación de los mensajes que pueden ser aceptados, localizar la clase se define el mensaje, o una subclase que clase También es posible estimar la clase a partir de la relación de herencia de la clase a la que pertenece cada mensaje si hay varios mensajes que pueden aceptarse.
Descripción de las realizaciones preferidas Las realizaciones de la presente invención se describirán a continuación con referencia a los dibujos.
En primer lugar, se describirá un método de análisis de variables de instancia en el lenguaje objetivo C de acuerdo con una realización de la presente invención usando un programa real escrito en el lenguaje de objetivo-C.
La figura 1 (a) es un archivo de cabecera usado para explicar esta realización. En la figura, 1 (cada código en cada figura se muestra un círculo Como puede verse claramente) muestra un nombre de clase NTTcontroller de este archivo, 2 representa una variable de instancia, simulador está declarada tipo ID Significa que ya está hecho. De esta manera, para declarar variables de instancia, es fácil extraer variables de instancia de tipo id. 3 es la definición del nombre del método, y el contenido de la operación del método init se describe en un archivo de implementación de la misma clase. De esta forma, dado que el nombre del método que tiene el mismo nombre que el mensaje aceptado por la variable se define en el archivo de encabezado, es posible especificar la clase del mensaje. Puede buscar archivos necesarios para este análisis solo una vez.
La figura 1 (b) muestra un archivo de implementación de esta realización. En la figura, el número de referencia 4 denota un generador de NTT de nombre de clase a generar, y el número de referencia 5 denota un mensaje de generación de instancia nuevo. El simulador de variable de instancia crea un nuevo objeto con el nombre de clase NTTsimulator utilizando el mensaje new y asigna el resultado de la inicialización. Por lo tanto, la clase a la que pertenece el valor del simulador de variable de instancia es la clase NTTsimulator.
La figura 2 (a) es un archivo de encabezado usado para explicar otra realización de la presente invención. En la figura, 6 es el nombre de la clase NTTcontroller, 7 de este archivo es un modelo variable de instancia, se ha declarado en el tipo de identificación. 8 es solo la definición de los nombres de método init e initialize, y el contenido real de la operación se describe en el archivo de implementación de la misma clase.
La figura 2 (b) muestra un archivo de implementación de esta realización. En la figura, el número de referencia 9 denota un modelo NTT de nombre de clase a generar, y el número de referencia 10 denota una asignación de mensaje de generación de instancia. Message allod crea un nuevo objeto con la clase NTTmodel, lo inicializa con el mensaje init y asigna el resultado al modelo de variable de instancia. Por lo tanto, la clase a la que pertenece el valor del modelo de variable de instancia se convierte en la clase de modelo NTT.
La figura 3 (a) es un archivo de cabecera utilizado para explicar otra realización más de la presente invención. En la figura, el número de referencia 11 denota un nombre de clase NTTcontroller de este archivo, 12 un controlador de variable de instancia de tipo id, y 13 un nombre de método connect.
La figura 3 (b) muestra un archivo de implementación de esta realización. 14 es un conjunto de mensajes aceptado por el controlador de variables de instancia 12.
La figura 3 (c) es un archivo de cabecera que explica el caso en el que se define un mensaje en un lugar en esta realización. 15 representa una clase en la que se define el método setPort del mismo nombre y es el nombre de clase NTTport de este archivo de encabezado. 16 muestra la definición del método setPort que tiene el mismo nombre que el mensaje setPort. Como el resultado de la operación de este mensaje se devuelve a la variable de instancia, la clase del mensaje es la clase a la que pertenece el valor de la variable de instancia. Por lo tanto, instancia de controlador variables debido a que está recibiendo el resultado de la operación de la setPort mensaje, la clase de la clase perteneciente NTTport mensaje setPort es el valor de la instancia de controlador variable.
La figura 4 (a) es un archivo de cabecera utilizado para explicar otra realización de la presente invención. En la figura, 17 es el nombre de la clase NTTcontroller, 18 de este tipo de archivo ID de instancia controlador variable 19 es un nombre de método updateConnect.
La figura 4 (b) muestra un archivo de implementación de esta realización. En la figura, el número de referencia 20 denota un mensaje de actualización aceptado por el controlador de la variable de instancia 18.
La figura 4 (c) es un archivo de cabecera que explica el caso en el que se define un mensaje en un lugar en esta realización. En la figura, 21 representa el nombre de clase NTTsimulator, 23 también de manera similar definida por nombre de la clase NTTmodel tiene que UpdatePort método se define, 22, 24 muestra que UpdatePort método. Por lo tanto, se acepta la variable de instancia de mensaje, incluso si la clase de los mismos métodos nombre definido hay más, la relación entre las clases, es posible estimar la clase. Por lo tanto, instancia de controlador variable de 18, puesto que está recibiendo el resultado de la operación de uno de la clase updatePort mensaje NTTsimulator 21 o NTTmodel 23, clase NTTsimulator o NTTmodel convierte pertenece clases de valor de la instancia de controlador variable.
La figura 5 (a) es un archivo de cabecera usado para explicar aún otra realización de la presente invención. En la figura, 25 es el nombre de clase NTTcontroller de este archivo, 26 es el controlador de la variable de instancia, 27 es el nombre del método connect, updateConnect.
La figura 5 (b) muestra un archivo de implementación de esta realización. En la misma figura, el número de referencia 28 indica un conjunto de mensaje Puerto 29 aceptado por el controlador de variable de instancia 26, y un mensaje de actualización de puerto que también acepta el mismo.
La figura 5 (c) es un archivo de cabecera que explica el caso en el que el segundo mensaje se define en varios lugares en la presente realización. En la figura, 30 es el nombre de la clase NTTport, 31 mensajes SETPORT 28 con el mismo nombre que el setPort método está definido significa que la clase padre NTTmodel, 32 indica que el método setPort. Un nombre de clase NTTsimulator 33 en el que se define un método updatePort que tiene el mismo nombre que el mensaje updatePort 29, y un método updatePort 34. 35 también nombre de la clase NTTsimulator 33 como el nombre de clase definida NTTmodel, 36 representa que UpdatePort método.
La figura 6 es un diagrama de relación de clases en la realización descrita anteriormente. Por lo tanto, un mensaje SETPORT instancia de controlador variable de 26 se recibe, 30 de clase updatePort se define (que corresponden a 28 y 29 en la Fig. 5 (b)) es de NTTport, NTTsimulator y NTTmodel (figura 5 (c) , 33, 35), la clase puede estimarse a partir de la relación entre clases. Además, cuando la clase padre de NTTport era NTTmodel (se encuentra en 31 de la Fig. 5 (c)), la clase pertenece valor devuelto variable de instancia identifica un NTTport clase si la subclase hereda todos los métodos Tu puedes
A continuación, la operación global se describirá con referencia al diagrama de flujo que se muestra en la figura 7.
7, primera, las variables de instancia programa de destino análisis declaradas en tipo ID desde el archivo de cabecera extraída (paso S11), y selecciona un archivo de aplicación de la misma clase que el archivo de cabecera (etapa S12). A continuación, para detectar la descripción del mensaje para generar dicha variable de instancia en dicho archivo de implementación (paso S13), y comprueba si la detección de la descripción del mensaje no es (paso S14).
Si la descripción del mensaje es uno (paso S15), la clase de la variable de instancia se especifica mediante la clase generada por el mensaje (paso S17). Si la descripción del mensaje es plural (paso S16), la clase de la variable de instancia se especifica mediante la clase creada en cada mensaje para cada lugar (paso S18).
Además, en la verificación de la etapa S14, si la descripción del mensaje no puede ser detectado, detecta la descripción del mensaje que se recibe la variable de instancia en el archivo de aplicación (paso S19), la detección de la descripción del mensaje No hay verificación (paso S20). Si no hay una descripción del mensaje, se determina que es imposible especificar la clase (paso S21). Si se describe el mensaje, se extrae la descripción del método que tiene el mismo nombre que el mensaje en el archivo de encabezado (paso S22). Si el tipo del mensaje es la de identificar la clase de las variables de instancia en cualquiera de las subclases de la clase o la clase de la relación de herencia de la clase a la que se define el método (paso S23, S27).
Si el tipo del mensaje es plural, la clase en la que se define el método y todas sus subclases están marcadas (pasos S23 y S24). Si pluralidad clase marcado clase uno, la identificación de la clase de las variables de instancia en cualquiera de las subclases de la clase o la clase de la relación de herencia de la clase (etapa S25, S27), si está marcado , La clase de la variable de instancia se especifica en la clase heredando todos los métodos marcados o la subclase de la clase (pasos S25, S26).
A continuación, se describirá un caso en el que se aplica el método de análisis de variables de instancia en el lenguaje C objetivo de la presente invención mediante tres tipos de software. En kit de software NeXTSTEP, con una variedad de aplicaciones, tales como un protector de pantalla o Draw 'EX', unas bibliotecas de clases de terceros, marco de gestión NW 'XY', esto [los inventores] et al., En el software 'ZJ', que era la investigación y el desarrollo Ahí El tamaño de estas bibliotecas de clase es de 673 clases, y varios desarrolladores se dedican al desarrollo. Además, dado que estos softwares son de una amplia variedad de tipos, se presume que son de uso general.
Con este software, se obtuvieron los siguientes resultados. Con respecto a la creación de instancias, el 26.3% de las variables de instancia se ejecutan en el programa objetivo de análisis, por lo que un cuarto de la variable de tipo id definitivamente puede determinar el tipo. Entonces, para el 53,1% de las restantes variables, ya que los mensajes enviados a la variable existe, es posible estimar la clase de la variable a partir de la relación de herencia. Por lo tanto, alrededor del 80% de las clases se pueden confirmar o estimar para cualquier software. Además, a excepción de 'sin usar' que no se utiliza en absoluto, se especifica el 85% o más de las clases.
Efecto de la invención
Como se ha descrito anteriormente, de acuerdo con la presente invención, prestando atención a la generación ejemplo, cuando se genera una nueva instancia en el objetivo-C, describe un nombre de clase, sólo la región nuevo o asegurado para realizar reservas de área y de inicialización Al usar un mensaje llamado alloc, puede determinar la clase de la variable de instancia encontrando este mensaje. En el caso de utilizar una instancia generada en otra clase, y el análisis de una variable de instancia de mensaje puede aceptar, las variables de instancia mediante la limitación de los mensajes que pueden ser aceptados, localizar la clase se define el mensaje, o una subclase que clase También es posible estimar la clase a partir de la relación de herencia de la clase a la que pertenece cada mensaje si hay varios mensajes que pueden aceptarse. La presente invención especifica la clase de manejo variable de un tipo arbitrario, que es efectivo para comprender el programa.
Además, la presente invención se puede aplicar para determinar elementos de un objeto que almacena datos tales como List. Cuando se addobject un elemento de un objeto, puede determinar o estimar la clase del mensaje enviado a ese elemento. Además, cuando se hace referencia a la información del objeto (objectAt), es posible estimar la clase del mensaje enviado al elemento que es el valor de retorno.
Breve descripción de los dibujos La figura 1 es un diagrama que muestra un archivo de cabecera y un archivo de implementación utilizado para explicar una realización de la presente invención.
La figura 2 muestra un archivo de cabecera y un archivo de implementación utilizado para explicar otra realización de la presente invención.
Un diagrama que muestra un archivo de cabecera adicional que describe el caso en el que los archivos de cabecera utilizan para explicar otra realización, el archivo de implementación, y un mensaje en la presente realización se define en una localización de la Figura 3 la invención Ahí
Otro archivo de cabecera utilizada para explicar las formas de realización, los archivos de aplicación, y mensajes en este ejemplo es un diagrama que muestra un archivo de cabecera que describe un caso como se define en una posición de la Fig. 4 la invención .
archivo de cabecera utilizada para explicar adicionalmente otro ejemplo de la Fig. 5 presente invención, los archivos de implementación, y la cabecera de archivos segundo mensaje que describe el caso definido en varios lugares en esta realización FIG.
6 es un diagrama de relación de clase de la realización de la Fig. 6;
La figura 7 es un diagrama de flujo que muestra un procedimiento de procesamiento de un método de análisis de variable de instancia en el lenguaje de objetivo-C de la presente invención.
1 Nombre de clase
2 variable de instancia
3 Nombre del método
4 Nombre de clase
5 mensaje de creación de instancia
Reclamo
En el programa se describe en la reivindicación 1 lenguaje orientado a objetos objetivo-C, la clase que pertenece variables de instancia declaradas tipo Identificación del tipo se determina en tiempo de ejecución, a métodos particulares sin ejecutar el programa, las variables de instancia desde el archivo de cabecera para ser analizadas programa se declaran en la identificación de tipo de extraer, seleccionar el archivo de implementación de la misma clase que el archivo de cabecera para generar la variable de instancia en el mensaje de archivo de implementación Si la descripción del mensaje es un lugar, la clase de la variable de instancia es especificada por la clase generada por el mensaje, y si la descripción del mensaje es una pluralidad de ubicaciones, En la clase creada por el mensaje, la variable de clase de la variable de instancia Identificar exploración, si la descripción del mensaje no puede ser detectada, la detección de la descripción de la aplicación mensaje de la variable de instancia se recibe en un archivo, si no hay una descripción del mensaje, una clase particular no posible y determina, si hay una descripción del mensaje, en el archivo de cabecera para extraer una descripción del mensaje con el mismo nombre que el método, si el tipo del mensaje es uno de una clase a la que se define el método para identificar la clase de las variables de instancia en cualquiera de la relación de herencia de la clase o las subclases de la clase, si una pluralidad de tipos de que el mensaje es para marcar todas las clases y sus subclases se define de tal método, marca Si solo hay una clase, la clase o la clase relevante de la relación de herencia de la clase Identificar la clase de exploración de las variables de instancia de cualquier subclase de, marcan las clases es el tiempo que es plural, identifica la clase de las variables de instancia en cualquiera de las subclases de la clase o la clase hereda todos los métodos marcados Método para analizar variables de instancia en lenguaje objetivo C caracterizado por:
Dibujo :
Application number :1996-161171
Inventors :日本電信電話株式会社
Original Assignee :彦坂洋子、中西弘毅、蔭山克禎、荒野高志