为何需要SysML以及系统思维?以及…

来源:互联网 发布:我的世界透视矿物js 编辑:程序博客网 时间:2024/05/20 01:45
  终于到研二了,这学期也是最后一学期的留学生活了,总归得做些总结。
  上学期对SysML做了蛮多研究,发觉还不是那么通俗易懂和直观。虽然作为一个从UML延伸过来的语言,SysML有着很大的志向,想成为一个横跨软硬件和大型工程的模型语言。不过就其学习成本来说,还是略高。许多小项目使用基于文档的描述的话,估计从开始到做完的时间,都比学会SysML要短,更不要说使用SysML了。

  这里讲讲系统思维的重要性
  
  为何需要系统思维?最近大家都在写论文,用LaTeX写的话就不说了。如果用word写,那么会遇到很多问题,单双页排版问题,图标和论文引用问题,图片序号更新问题,目录更新问题。现在应该没有人用手敲目录的页数了,因为那样工程量巨大,而且一旦内容有更新,那么其目录页数又有更改,就得重新输入。删掉其中一个图,那么随后的图片序号都得按顺序调整,这岂不是得崩溃。更崩溃的是,还得调整文章里引用的图片序号。
  从此可以看出,如果写word的时候,没有事先设定好自动排号,没设定好自动编号的标题,那么到后面整个“系统”更改起来(例:插入个新图片或者删除个图片,图片序号都要更改)难度极大,工程量成倍增长。而且,系统越大,重复性工作越多,越多的工作耗费在毫无益处的事情上(改序号,校队文章引用)。

  那么,什么是系统思维?什么需要系统思维?

  一般一个系统内,如果你有预感,一些东西会时刻改变,而且是有规律地改变,那么就得好好设计它。在编程中,就是你把一个变量设计成数组(固定大小,不能扩展),还是链表(能自由扩展)的问题。例如在写论文的例子中,一个图表,其序号会在文章当中不断引用,而一但更新了这个图表的序号,其在文章当中的引用的序号也要一起更新的话,那么这个序号就应该好好设计成动态的形式。
  最基本的系统思维就是:考虑哪些地方是固定不变的,哪些地方是需要扩展的,预留好接口。
  考虑到系统的大小,就可以回答什么需要系统思维。一篇4页纸的论文,在考虑其图表和论文引用的时候需要系统思维吗?大体上应该是不用的。但是当你写一篇100多页的论文的时候,其中有上百个图表,那就得好好考虑这个问题了。
  其实考虑系统思维,最基本的目标还是减少可预见的重复性劳动,提升系统开发效率。其次是提高系统可读性,方便后期的维护与升级。

……………………………………………………

  这学期的确还挺忙的,不过收获也颇丰。有幸通过David的HyperLoop参赛小组,获得了ArduinoYún的学习机会。上淘宝一查我擦,Arduino Yún的价格居然还在500、600元人民币左右,居然还没降价。看来国内山寨厂商破解还得加油啊!淘宝ArduinoNano的价格已经在10多元左右了,感觉像称斤卖一样。只有设备价格降到一个白菜的级别,对其科学的研究才能够爆发式发展。最近去庆应K2实验室参观,发觉里面有一位老师特别喜欢机器人,用Arduino做了许多设备和控制装置,还非常兴奋地跟我说“啊!我从阿里巴巴买的,好便宜!好便宜!就是发来日本有些久”……我听了既为中国自豪,又感到有些对日本的产业无奈。

  用Arduino Yún写了个小程序,成功连接上了与电脑连接相同的Wi-Fi网络,并向电脑上运行的一个Java编的Echo服务器发送了消息。服务器成功收到了。ArduinoYún端的代码很简单:

#include
#include

#define PORT 5001

// Define our client object
YunClient client;
int i;

void setup()
{
  // Bridge startup
  pinMode(13, OUTPUT);
  i=0;
  Bridge.begin();
  Serial.begin(9600);
  while (!Serial); // wait for a serialconnection
}

void loop()
{
  digitalWrite(13, HIGH);  // turn the LED on (HIGH is the voltage level)
  // Make the client connect to the desiredserver and port
  IPAddress addr(172,16,249,105);
  
  // Or define it using a single unsigned 32bit value
  // IPAddress addr(0xc0a8sab9); // same as192.168.42.185
  // Or define it using a byte array
  // const uint8 addrBytes = {192, 168, 42,185};
  // IPAddress addr(addrBytes);

  client.connect(addr, PORT);
  digitalWrite(13, LOW);   // turn the LED off by making the voltageLOW
  // Or connect by a server name andport.
  // Note that the Yun doesn't support mDNSby default, so "Yun.local" won't work
  // client.connect("ServerName.com",PORT);

  if (client.connected()){
    Serial.print("Connectedto the server. times");
    Serial.println(i);
    // Send something to theclient
   client.println("Something... for the times:");
    digitalWrite(13, HIGH);  // turn the LED on (HIGH is the voltagelevel)
  
    // Cheap way to give theserver time to respond.
    // A real application(as opposed to this simple example) will want to be moreintelligent about this.
    delay (250);
    client.println(i);
    // Read all incomingbytes available from the server and print them
    
    while(client.available())
    {
      charc = client.read();
     Serial.print(c);
    }
    Serial.flush();

    // Close theconnection
    
    client.stop();
    i++;
    digitalWrite(13, LOW);   // turn the LED off by makingthe voltage LOW
  }else{
    Serial.println("Couldnot connect to the server.");
  }
  // Give some time before trying again
  delay (1000);
}


代码修改自这里:http://forum.arduino.cc/index.php?topic=311200.0
0 0
原创粉丝点击