2015-03-17 3 views
1

Я просто хочу быстро создать java-файл (используя Netbeans IDE 8.0), чтобы преобразовать две диаграммы UML в java-файлы, которые я уже написал.Нужно сделать java-программу для преобразования диаграммы UML в класс java на netbeans

Примечание: класс фактически не должен работать универсально со всеми диаграммами UML, но он просто должен работать с обоими этими двумя.

В UML диаграммы: CarUML.txt

Car 
=================== 
- cost : int 
- color : String 
- make : String 
+ count : int 
=================== 
+ Car (int cost) 
=================== 

И PetUML.txt

Pet 
=================== 
- species : String 
+ isChipped : boolean 
- name : String 
- age : int 
=================== 
+ Pet (String name) 
=================== 

Я просто хочу, файл, который будет выводить следующие из них:

Пет. java

package UMLconv; 

public class Pet { 
    private String species; 
    private String name; 
    private int age; 

    public Pet (String name) { 
    this.name = name; 
    } 

} 

и Car.java

package UMLconv; 

public class Car { 
    private int cost; 
    private String color; 
    private String make; 
    public int count; 

    public Car (int cost) { 
    this.cost = cost; 
    } 

} 

Это то, что у меня есть на данный момент:

import java.util.Scanner; 

public class CodeFromPseudo { 



    public static void main(String[] args) { 



      Scanner scan = new Scanner(
       CodeFromPseudo.class.getResourceAsStream("CarUML.txt"));  

     //Scanner scan = new Scanner(CodeFromPseudo.class.getResourceAsStream("PetUML.txt")); 

     String line; 

     String [] words;   

     while(scan.hasNextLine()){ 

      line = scan.next(); 

      System.out.printf("public class %s {\n",line); 

      scan.nextLine(); 
      scan.nextLine(); 


      for (int i = 0; i < 4; i++) {  

      words = scan.nextLine().split("\\s+"); 

      System.out.print((words[0].contains("-")) ? "private" : "public"); 

      System.out.printf(" %s %s;\n\n", words[3],words[1]); 

      } 

      scan.nextLine(); 



      words = scan.nextLine().split("\\s+"); 

      System.out.print((words[0].contains("-")) ? "private " : "public "); 

      System.out.printf("%s (%s %s) {\n",words[1],words[3],words[4]); 

      System.out.printf("this.%s = %s;\n",words[4],words[4]); 

      System.out.println("}\n}"); 




      scan.nextLine(); 

      } 

     } 


     } 

Не уверен, что я сейчас не хватает? Спасибо

+0

Пока ваш вопрос выглядит не по теме, как код написания запроса, который мы не делаем на переполнение стека. Но мы можем помочь вам решить проблемы в вашем коде. Вам просто нужно изменить свой вопрос и включить свои попытки кода и описать, что кажется проблемой. – Pshemo

+4

Я голосую, чтобы закрыть этот вопрос не по теме, потому что это запрос написания кода. – Pshemo

+1

Извините, не понял, могу ли я отредактировать его, чтобы добавить мои попытки, так что это не запрос на запись? – CF0rd

ответ

0

По существу, вы пытаетесь написать генератор кода. Я главный архитектор в BITPlan - компания, предлагающая инструмент для создания генераторов генераторов. http://www.smartgenerator.org

Есть инструменты, доступные для этой задачи, но вы также можете сделать это с нуля. Ваш старт - o.k. вы читаете на своем входе и пытаетесь напрямую выводить то, что у вас есть. Вместо того чтобы делать это один шаг подход вы можете разбить код на несколько частей:

  1. сканирования ввод и чтение соответствующего класса частей и имена атрибутов в соответствующий Java класс структуры JClass/jattributes/joperations
  2. делать какие-либо изменения, необходимые (в вашем случае этот шаг может оказаться ненужным, поскольку все вашего класса и имена атрибутов кажутся действительными)
  3. создания Java-код из структуры

Вы, вероятно, не очень далеко с этим подход учитывая ваш ограниченный вход - в настоящее время у вас есть только имя видимости и тип атрибутов, но, к примеру, нет документации. В качестве упражнения это может быть o.k.

Вот некоторые отрывочные код, чтобы дать вам подсказку, как поступить:

/** 
* i represent a Java class with its attribute 
*/ 
public class JClass { 
    public String name; 
    public String documentation; 
    // class JAttribute needs to be defined with 
    // visibility, name, type and documentation fields 
    public List<JAttribute> attributes(); 
    // do the same approache with operations 
    public List<JOperation> operations(); 

    public String asJavaCode { 
     String code=""; 
     code+="/** 
     code+=" * "+documentation; 
     code+=" */"; 
     code+="public class "+name+" {\n"; 
     code+="//members"; 
     for (JAttribute attribute:attributes) { 
     code+="// "+atttribute.documentation; 
     code+=attribute.visibility+" "+attribute.type+" "+attribute.name+";" 
     // add generation of getters and setters here as you see fit 
     } 
     // add operation handling here 
     code+="}"; 
    } 
    // add code for adding attributes 
} 
Смежные вопросы