一切皆可抽象

          大而無形 庖丁解牛 厚積薄發(fā) 滌慮玄覽
             ::  ::  ::  ::  :: 管理

          問: 如何設(shè)置Java 2(JDK1.2)的環(huán)境變量?
          答:
          Java 2安裝后,需要設(shè)置PATH和JAVA_HOME環(huán)境變量.與JDK1.1不同的是:設(shè)置好JAVA_HOME環(huán)境變量后,JVM將自動搜索系統(tǒng)類庫以及用戶的當(dāng)前路徑.
          Java 2環(huán)境變量的設(shè)置如下例所示:
          Solaris平臺: setenv JAVA_HOME Java2的安裝路徑
          setenv PATH $JAVA_HOME/bin:${PATH}
          Windows平臺: set JAVA_HOME=Java2的安裝路徑
          set PATH=$JAVA_HOMEbin;%PATH%

          問: 哪些Java集成開發(fā)工具支持Java 2?
          答:
          目前流行的Java集成開發(fā)環(huán)境,如Inprise的JBuilder,Symantec的Visual Cafe, Sybase的PowerJ,都支持Java 2.

          問: 如果在Netscape或IE瀏覽器中運行Java applet時出現(xiàn)了錯誤,如何確定錯誤范圍?
          答:
          當(dāng)java applet在瀏覽器中運行時,使用的是瀏覽器本身的缺省JVM.而不同瀏覽器對JDK的支持程度也不盡相同. 因此,在Netscape或IE瀏覽器中運行Java applet出現(xiàn)了錯誤,建議使用JDK提供的工具appletviewer或Sun公司的Hotjava瀏覽器來測試該applet,以確定錯誤的產(chǎn)生是與瀏覽器相關(guān).
          如果applet在appletviewer或Hotjava中運行一切正常,則錯誤的產(chǎn)生是由于瀏覽 器不完全兼容JDK而引起的. 此時,解決方法可以是使用Hotjava瀏覽器或者安裝 Sun公司的Java Plugin.
          如果applet在Hotjava瀏覽器或appletviewer中運行即發(fā)生錯誤,則應(yīng)當(dāng)根據(jù)錯誤 提示檢查applet程序.

          問: 當(dāng)用JDBC向數(shù)據(jù)庫中插入數(shù)據(jù)或從數(shù)據(jù)庫中提取數(shù)據(jù)時,為何有時中文字符會顯示為亂碼?
          答:
           這個問題的實現(xiàn)通常與各個JDBC driver的實現(xiàn)有關(guān). 目前大多數(shù)JDBC driver采用本地編碼格式來傳輸中文字符,例如中文字符"0x4175"會被轉(zhuǎn)成"0x41"和"0x75"進行傳輸. 因此我們需要對JDBC driver返回的字符以及要發(fā)給JDBC driver的字符進行轉(zhuǎn)換.
          當(dāng)用JDBC driver向數(shù)據(jù)庫中插入數(shù)據(jù)時,需要先將Unicode轉(zhuǎn)成native code; 當(dāng) JDBC driver從數(shù)據(jù)庫中查詢數(shù)據(jù)時,則需要將native code轉(zhuǎn)換成Unicode. 下面給出了這兩種轉(zhuǎn)換的實現(xiàn):

          String native2Unicode(String s) {
          if (s == null || s.length() == 0) {
          return null;
          }
          byte[] buffer = new byte[s.length()];
          for (int i = 0; i s.length(); i++) { if (s.charAt(i)>= 0x100) {
          c = s.charAt(i);
          byte []buf = (""+c).getBytes();
          buffer[j++] = (char)buf[0];
          buffer[j++] = (char)buf[1];
          }
          else {
          buffer[j++] = s.charAt(i);
          }
          }
          return new String(buffer, 0, j);
          }
          除使用以上兩個方法之外,有些JDBC driver如果對jdbc driver Manager設(shè)置了正確 的字符集屬性,以上2個方法就不需要了.

          問:當(dāng)用Servlet來處理http請求并產(chǎn)生返回的HTML頁面時,如何使HTML頁面中的中文字符能夠正常顯示?
          答:
          javax.servlet.http.HttpResponse類用于產(chǎn)生返回頁面.通過HttpResponse定義的方法getOutputStream()可以獲得ServletOutputStream的實例,這樣用戶就可以利用ServletOutputStream.write方法向輸出流中寫入返回頁面的內(nèi)容. 但是ServletOutputStream使用的是缺省的編碼方式,如果要使返回頁面中的中文字 符能夠正常顯示,最好顯示地指定所用的字符編碼方式. 通常需要構(gòu)造一個 OutputStreamWriter , 例程如下:

          public void doGet (HttpServletRequest req, HttpServletResponse res)
          throws ServletException, IOException
          {
          res.setContentType("text/html");
          ServletOutputStream out = res.getOutputStream();
          OutputStreamWriter ow = new OutputStreamWriter(out,"GB2312");
          ow.write("這是測試");
          ow.flush();
          ow.close();
          }

          問:如何設(shè)置Java WebServer的CLASSPATH,以包含用戶的class文件?
          答:
          有兩種方法可以設(shè)置Java WebServer的CLASSPATH環(huán)境變量,以使用戶編寫的Servlet能夠調(diào)用用戶的class文件.
          將用戶的class文件放到 JavaWebServer_Dir/classes目錄下,在Java WebServer 啟動時,classes目錄被自動加入到CLASSPATH環(huán)境變量中了.
          修改httpd.nojre文件,將用戶class文件所在的路徑名加到CLASSPATH環(huán)境變量中.

          問:為什么在Windows平臺上用Naming.lookup來獲取遠(yuǎn)程RMI對象時會很慢?
          答:
          機器的網(wǎng)絡(luò)設(shè)置不正確很可能會引起該問題的發(fā)生.
          RMI使用了Java網(wǎng)絡(luò)類,特別是java.net.InetAddress類,它將查詢TCP/IP的主機名, 包括IP地址到主機名的映射和主機名到IP地址的映射.在Windows平臺,這種查詢功能 是由本地的Windows Socket庫來實現(xiàn)的. 因此延時是發(fā)生在Windows庫中,而非RMI中.
          如果你的機器設(shè)置成使用DNS,問題通常是DNS服務(wù)器查不到主機名,你所發(fā)現(xiàn)的延時 是DNS查詢的延時. 請嘗試將RMI通信中涉及到的所有主機名/IP地址加到本地文件winntsystem32driversetchosts或windowshosts中. 格式如下:

          IP地址 主機名

          如此設(shè)置應(yīng)當(dāng)可以明顯地減少查詢所花的時間.

          問: 編寫Java application時,如何設(shè)置proxy的信息,以便訪問外部網(wǎng)站?
          答:
          若在java application中訪問外部網(wǎng)站,首先應(yīng)設(shè)置proxy信息,樣例代碼如下:

          import java.util.properties;

          .....

          Properties sys = System.getProperties();
          sys.put("proxySet","true");
          sys.put("proxyHost","myHTTP.proxyserver.com");
          sys.put("proxyPort","80");
          System.setProperties(sys);
          u = new URL(website);
          connect = (HttpURLConnection)u.openConnection();
          .....


          問: Swing組件JList的列表數(shù)據(jù)修改了,如何通知JList改變顯示?
          答:
          JList組件有一個單獨的顯示模式ListModel來表示JList的顯示數(shù)據(jù).
          JList創(chuàng)建以后,JList數(shù)據(jù)元素的值及數(shù)據(jù)元素的數(shù)量可以動態(tài)地改變.
          JList在它的數(shù)據(jù)模式ListModel中觀察數(shù)據(jù)的改變.因此,一個ListModel 的正確實現(xiàn)應(yīng)當(dāng)在每次數(shù)據(jù)發(fā)生改變時,通知事件的監(jiān)聽者.
          當(dāng)使用構(gòu)造函數(shù)JList(Object[])創(chuàng)建一個JList的實例時,系統(tǒng)將自動 創(chuàng)建一個DefaultListModel的實例來存儲JList的顯示數(shù)據(jù), 可以調(diào)用 DefaultListModel中定義的簡便方法來動態(tài)地修改JList的數(shù)據(jù),如 removeElementAt(index),addElement(Object)等. DefaultListModel 在修改數(shù)據(jù)的同時,將通知JList關(guān)于數(shù)據(jù)的改變.

          問:在Java applet中如何實現(xiàn)一個模式對話框?
          答:
          在Java applet中實現(xiàn)模式對話框的關(guān)鍵就是在創(chuàng)建一個對話框的時候 要為該對話框指定一個正確的父窗口.因為Applet是Panel類的子類,不 可以作為對話框的父窗口,所以首先要獲得applet所在的窗口,作為模式 對話框的父窗口. 樣例代碼如下:
          .....
          Dialog d = new Dialog( getParentWindow(comp),title);
          // comp為applet上的任意一個組件
          ....
          public void getParentWindow(Component compOnApplet,String title){
          Container c = compOnApplet.getParent();
          while (c != null) {
          if (c instanceof Frame)
          return (Frame) c;
          c = c.getParent();
          }
          return null;
          }

          問: 在Java applet中如何顯示另外一個HTML頁面?
          答:
          通過java.applet.Applet.getAppletContext()方法可以獲得與該applet相關(guān)的AppletContext, AppletContext.showDocument(URL)方法就可以使applet所在的瀏覽器顯示另外一個網(wǎng)頁.

          問: 用JDK實現(xiàn)的簽名applet,可否在Netscape或IE中運行?
          答:
          用JDK實現(xiàn)的簽名applet,不可以在Netscape或IE中運行,但是可以在Hotjava瀏覽器中運行.
          不同的瀏覽器提供了不同的簽名applet機制,如Netscape提供了zigbert工具和 Capability API, 而IE則需要使用CAB文件. 但是,無論是Netscape工具產(chǎn)生的 簽名applet,還是用IE產(chǎn)生的簽名applet,都不可以在其它的瀏覽器中運行.
          如果要使JDK產(chǎn)生的簽名applet能夠在Netscape或IE中運行,解決方法是在 Netscape或IE中安裝Java Plugin,則用JDK實現(xiàn)的簽名applet就可以在這兩種 瀏覽器中運行.

          問: 用JNI技術(shù)可以從Java應(yīng)用中調(diào)用C程序庫,但是如何使該C程序庫可以調(diào)用另外的C程序庫?
          答:
          如果一個被Java調(diào)用的C程序庫C1仍需要調(diào)用另外一個C程序庫C2,那么在編譯C1的時候應(yīng)當(dāng)聯(lián)接程序庫C2,步驟如下(Solaris平臺):
          編寫調(diào)用C庫的Java文件,并編譯.
          javac java文件名

          產(chǎn)生C程序頭文件
          javah -jni java文件名(不帶后綴.java)

          編寫被Java調(diào)用的C程序C1.c,以及被C1調(diào)用的C2.c,并編譯.
          cc -G -Iinclude路徑名 C2.c -o libC2.so
          cc -G -Iinclude路徑名 -lC2 C1.c -o libC1.so

          設(shè)置環(huán)境變量
          setenv LD_LIBRARY_PATH libC1.so,libC2.so所在路徑:${LD_LIBRARY_PATH}

          運行java應(yīng)用

          問: 在Java語言中,如何列出PC機文件系統(tǒng)中的所有驅(qū)動器名?
          答:
          在Java 2版本中,java.io包中的File類新增加了方法listRoots()可以實現(xiàn)這一功能.

          問: 為什么Runtime.exec("ls")沒有任何輸出?
          答:
          調(diào)用Runtime.exec方法將產(chǎn)生一個本地的進程,并返回一個Process子類的實例,該實例可用于控制進程或取得進程的相關(guān)信息. 由于調(diào)用Runtime.exec方法所創(chuàng)建的子進程沒有自己的終端或控制臺,因此該子進程的標(biāo)準(zhǔn)IO(如stdin,stdou,stderr)都通過Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream()方法重定向給它的父進程了.用戶需要用這些stream來向 子進程輸入數(shù)據(jù)或獲取子進程的輸出. 所以正確執(zhí)行Runtime.exec("ls")的例程如下:
          try
          {
          process = Runtime.getRuntime().exec (command);
          InputStreamReader ir=newInputStreamReader(process.getInputStream());
          LineNumberReader input = new LineNumberReader (ir);
          String line;
          while ((line = input.readLine ()) != null)
          System.out.println(line);
          }
          catch (java.io.IOException e){
          System.err.println ("IOException " + e.getMessage());
          }

          問: 如何產(chǎn)生簽名applet,以使applet能夠訪問本地資源?
          答:
          在jdk1.1中,可以使用javakey命令來產(chǎn)生公鑰,私鑰,證書和簽名的jar文件,詳細(xì)資料 請參考: http://java.sun.com/security/usingJavakey.html而java 2對簽名機制做了比較大的改進,允許用戶更靈活地設(shè)置安全權(quán)限.Java 2提供了三個工具:keytool,policytool和jarsigner來實現(xiàn)簽名applet.例如,Joe編寫了一個簽名applet:SignedApplet.java,那么產(chǎn)生一個簡單的簽名applet的過程如下:

          //產(chǎn)生密鑰,密鑰別名為joe,口令為sign12,存放在密鑰庫joestore中
          keytool -genkey -alias joe -keypass sign12 -keystore joestore
          //將SignedApplet.class及相關(guān)文件打包成jar文件
          jar cvf SignedAppletDemo.jar
          //利用keytool生成的自簽名的證書產(chǎn)生簽名applet(jar文件)
          jarsigner -keystore joestore -signedjar joe.jar SignedAppletDemo.jar joe
          //將自簽名證書從keystore中輸出到文件
          keytool -export -keystore joestore -alias joe -file joe.cer
          而對于簽名applet的接受方Susan,需要通過如下步驟來安全地執(zhí)行
          Joe編寫的簽名applet:
          //得到Joe的證書并將之讀入到密鑰庫中susanstore中
          keytool -import -alias joe -file joe.cer -keystore susanstore
          //運行policytool產(chǎn)生滿足Susan要求的policy文件
          policytool
          //用appletviewer運行之,或在瀏覽器中安裝java plugin來運行之.
          關(guān)于簽名applet在Java Plugin中的部署請參考以下網(wǎng)頁: http://java.sun.com/security/signExample12/

          注:以上的例子為簡單起見,使用了keytool產(chǎn)生的自簽名證書.其實,用戶也可以使用keytool -certreq向商業(yè)CA中心申請電子證書.

          問:若通過ObjectOutputStream向一個文件中多次以追加方式寫入object,為什么用ObjectInputStream讀取這些object時會產(chǎn)生StreamCorruptedException?
          答:
          使用缺省的serializetion的實現(xiàn)時,一個ObjectOutputStream的構(gòu)造和一個ObjectInputStream的構(gòu)造必須一一對應(yīng).ObjectOutputStream的構(gòu)造函數(shù)會向輸出流中寫入一個標(biāo)識頭,而ObjectInputStream會首先讀入這個標(biāo)識頭.因此,多次以追加方式向一個文件中寫入object時,該文件將會包含多個標(biāo)識頭.所以用ObjectInputStream來deserialize這個ObjectOutputStream時,將產(chǎn)生StreamCorruptedException.一種解決方法是可以構(gòu)造一個ObjectOutputStream的子類,并覆蓋writeStreamHeader()方法.被覆蓋后的writeStreamHeader()方法應(yīng)判斷是否為首次向文件中寫入object,羰?則調(diào)用super.writeStreamHeader();若否,即以追加方式寫入object時,則應(yīng)調(diào)用ObjectOutputStream.reset()方法.

          問: 對象的序列化(serialization)類是面向流的,應(yīng)如何將對象寫入到隨機存取文件中? 答:
          目前,沒有直接的方法可以將對象寫入到隨機存取文件中,但是可以使用ByteArray輸入/輸出流作為中介,來向隨機存取文件中寫入或從隨機存取文件中讀出字節(jié),并且可以利用字節(jié)流來創(chuàng)建對象輸入/輸出流,以用于讀寫對象.需要注意的是在字節(jié)流中要包含一個完整的對象,否則讀寫對象時將發(fā)生錯誤. 例如,java.io.ByteArrayOutputStream可用于獲取ObjectOutputStream的字節(jié)流,從中可得到byte數(shù)組并可將之寫入到隨機存取文件中.相反,我們可以從隨機存取文件中讀出字節(jié)數(shù)組,利用它可構(gòu)造ByteArrayInputStream,進而構(gòu)造出ObjectInputStream,以讀取對象.

          問: 運行RMI應(yīng)用時,可不可以不手工啟動名字服務(wù)rmiregistry,而是從程序中啟動之?
          答:
          可以. java.rmi包中提供了類java.rmi.registry.LocateRegistry,用于獲取名字服務(wù)或創(chuàng)建名字服務(wù).調(diào)用LocateRegistry.createRegistry(int port)方法可以在某一特定端口創(chuàng)建名字服務(wù),從而用戶無需再手工啟動rmiregistry.此外,LocateRegistry.getRegistry(String host,int port)方法可用于獲取名字服務(wù).

          問: 使用類PrintJob進行打印操作時,應(yīng)如何設(shè)置打印機名等打印屬性?
          答:
          使用如下方法可以獲得PrintJob的實例用于控制打印操作:
          Toolkit.getPrintJob(Frame f, String jobtitle, Properties prop)
          那么對于打印屬性的設(shè)置可以通過對prop的屬性設(shè)置來實現(xiàn),打印屬性包括:
          awt.print.destination: 可以是"printer"或"file"
          awt.print.printer: 打印機名
          awt.print.fileName: 打印文件名
          awt.print.numCopies: 打印份數(shù)
          awt.print.options: 打印命令的打印選項
          awt.print.orientation: 打印方向,可以是"portrait"或"landscape"
          awt.print.paperSize: 紙張大小,可以是"letter","legal","executive"或"a4"

          問:在JDK1.1中Thread類定義了suspend()和resume()方法,但是在JDK1.2中已經(jīng)過時,應(yīng)使用什么方法來替代之?
          答:
          Thread.suspend本身易于產(chǎn)生死鎖.如果一個目標(biāo)線程對某一關(guān)鍵系統(tǒng)資源進行了加鎖操作,然后該線程被suspend,那么除非該線程被resume,否則其它線程都將無法訪問該系統(tǒng)資源.如果另外一個線程將調(diào)用resume,使該線程繼續(xù)運行,而在此之前,它也需要訪問這一系統(tǒng)資源,則將產(chǎn)生死鎖.
          因此,在Java 2中,比較流行的方式是定義線程的狀態(tài)變量,并使目標(biāo)線程輪詢該狀態(tài)變量,當(dāng)狀態(tài)為懸掛狀態(tài)時,可以使用wait()方法使之處于等待狀態(tài).一旦需要該線程繼續(xù)運行,其它線程會調(diào)用notify()方法來通知它.

          問: 使用JDBC編程,應(yīng)如何控制結(jié)果集ResultSet的指針,使之能夠上下移動,以及移動到結(jié)果集的第一行和最后一行?
          答:
          在JDK1.1中,ResultSet類中只定義了next()方法支持?jǐn)?shù)據(jù)指針的下移.但在Java 2中,ResultSet類增加了如下方法支持?jǐn)?shù)據(jù)指針的移動,包括:

          ResultSet.first():將數(shù)據(jù)指針移到結(jié)果集的第一行
          ResultSet.last(): 將數(shù)據(jù)指針移到結(jié)果集的最后一行
          ResultSet.previous(): 將數(shù)據(jù)指針上移一行

          以上的方法定義在JDBC2.0的規(guī)范中,所有支持JDBC 2.0的JDBC驅(qū)動程序都可以支持上述方法.目前Intersolv和OpenLink等JDBC驅(qū)動程序廠商均有產(chǎn)品支持JDBC 2.0 .

          問: 哪幾種Web Server支持Servlet?如何使IIS支持Servlet?
          答:
          目前,支持Servlet的服務(wù)器端產(chǎn)品主要有: Sun公司的Java WebServer,Lotus DominoGo WebServer,BEA weblogic Tengah Server,Jigsaw,NetForge,AcmeServer和Mot Bays Jetty等.
          此外,一些第三方廠商也開發(fā)了Servlet engine,以使其它WebServer(如Netscape Web Server,IIS等)能夠運行Servlet,如LiveSoftware的Jrun(http://www.livesoftware.com/ products/jrun/)等.

          問: 如何在Java應(yīng)用中將圖像存儲到圖像文件中?
          答:
          Java Advanced Imaging API(包含在Java Media API中)允許在Java應(yīng)用中執(zhí)行復(fù)雜的,高性能的圖像處理.JAI API提供了存儲圖像的能力.目前,JAI API支持以下幾種圖像文件格式:BMP,JEPG,PNG,PNM,TIFF.下面給出了將圖像存儲到BMP文件的一段代碼:
          OutputStream os = new FileOutputStream(fileToWriteTo);
          BMPEncodeParam param = new BMPEncodeParam();
          ImageEncoder enc = ImageCodec.createImageEncoder("BMP", os, param);
          enc.encode(img);
          os.close();
          有關(guān)存儲圖像文件的編程指南請參考以下網(wǎng)頁:
          http://java.sun.com/products/jav ... velopers/jai-guide/

          問: 如何用Java語言向串口讀寫數(shù)據(jù)?
          答:
          Sun公司的Java Communication API2.0可用于讀寫串口,它支持RS232串口和IEEE 1284 并口,提供了一種與平臺無關(guān)的串/并口通信機制.

          posted @ 2005-10-13 09:01 鋒出磨礪 閱讀(698) | 評論 (0)編輯 收藏

          如果你有一千個蘋果,有十個箱子,那么現(xiàn)在我要把一千個蘋果放進十個箱子里面,
          放了完之后,不管誰跟我要多少蘋果(包括1000以內(nèi)的喲),我都可以整箱整箱給
          他,這個問題有解嗎?

          我的思路。
          我從1開始推理的。如果你需要1個,必然有1個箱子裝一個。
          需要兩個,要么給一個箱子裝2個,要么再裝一個的箱子。感覺
          還是裝2個為一箱比較好。那么需要3個時候,就1+2了,那么你需要4個怎么辦。
          是裝一個4個呢,還是裝一個或者2個呢。為了省箱子,我裝4個。
          此時,我發(fā)現(xiàn)了規(guī)律,1,2,4。那么下一個是8,再下去就是16了,接著32。
          。。。。。。。
          如果有100個,到32的時候,下一個就是64了,總數(shù)超過100了。思路改為
          100-(1+2+4+8+16+32)=37。最后一個箱子裝37個。
          當(dāng)要求的蘋果數(shù)在1+2+4+8+16+32=63 和100之間的時候,將算法推諉
          給前面即可。就是先拿37個,剩下的從以前的箱子拼湊。
          至此,推理完畢。

          java實現(xiàn)代碼


          /**
           * <p>Title: </p>
           * <p>Description: </p>
           * <p>Copyright: Copyright (c) 2005</p>
           * <p>Company: </p>
           * @author not attributable
           * @version 1.0
           */

          public class Box {
            private int limit;
            private int code;
            private int applenum;


            public Box(int code,int applenum,int limit) {
               this.limit = limit;
               this.code  = code;
               this.applenum = applenum;

            }
            public int getApplenum() {
              return applenum;
            }
            public int getCode() {
              return code;
            }
            public int getLimit() {
              return limit;
            }
            public void setLimit(int limit) {
              this.limit = limit;
            }
            public void setCode(int code) {
              this.code = code;
            }
            public void setApplenum(int applenum) {
              this.applenum = applenum;
            }

          }


          /**
           * <p>Title: </p>
           * <p>Description: </p>
           * <p>Copyright: Copyright (c) 2005</p>
           * <p>Company: </p>
           * @author not attributable
           * @version 1.0
           */

          public class Apple {
            public Apple() {
            }
            final private int max=100;   // 蘋果總數(shù)
            static int   xqs = 99;       // 你需要的蘋果數(shù)
            private java.util.Vector Boxvec = new java.util.Vector(); // 箱子和箱子里的蘋果
            private int ai =0;
            private int k = 1;
            public static void main(String args[])
            {
              Apple apple = new Apple();
              apple.InBox(1);
              System.out.println("共需裝"+apple.GetBoxVec().size()+"箱");
              for (int i=0;i<apple.GetBoxVec().size();i++)
              {
                Box box = (Box)apple.GetBoxVec().get(i);
                System.out.println("第 ‘"+box.getCode()+"’ 箱裝'"+box.getApplenum()+"' ");
              }
              apple.GetApple(xqs,apple.GetBoxVec());
            }

            public void GetApple(int x,java.util.Vector vec)
            {
              if (x==1)
              {
               System.out.println("拿第一箱玩去,就1個");
              }
              else
              {
                if (x != 0) {
                  int key = 0;
                  for (int i = 0; i < vec.size() - 1; i++) {
                    Box xbox = (Box) vec.get(i);
                    Box ybox = (Box) vec.get(i + 1);
                    if (x > xbox.getLimit() && x <= ybox.getLimit()) {
                      key = i + 2;
                      System.out.println("拿第" + ybox.getCode() + "箱給他,共" +
                                         ybox.getApplenum() + "個");
                      GetApple(x - ybox.getApplenum(), vec);
                    }
                  }
                }
                else
                  System.out.println("完成");
              }

            }

            public void InBox(int i)
            {
              if ((i+i)>=max)
              {
                Box box = new Box(k,max-ai,max);
                Boxvec.add(box);
              }
              else
              {
                Box box = new Box(k,i,i+ai);
                k++;
                Boxvec.add(box);
                ai = ai + i;
                InBox(i+i);
              }
            }
            public java.util.Vector GetBoxVec()
            {
              return Boxvec;
            }

          }

          posted @ 2005-10-12 13:52 鋒出磨礪 閱讀(2121) | 評論 (8)編輯 收藏

          最近在做Java Application的項目,對于ui的美觀,做了一些嘗試。有幸看到了JGoodIdes的LookAndFeel包。
          效果大家可以看看如下連接
                  http://www.jgoodies.com
          經(jīng)過試驗,解決了中文亂碼問題,下面將經(jīng)驗和大家共分享。
          LookAndFeel如同css一樣,具體的概念大家可以參考其他文章,這里不做贅述。

          http://www.aygfsteel.com/Files/itaogo/plastic-1.1.3.zip
          1,加載附件plastic-1.1.3.jar到lib path,我用的是jbuilderX
          2,創(chuàng)建一個新類AppFont.java
             import java.awt.*;
             import javax.swing.UIManager;
             public class AppFont()
             {
               public static void setFont(Font pFont){
                UIManager.put("Button.font", pFont);
                UIManager.put("ToggleButton.font", pFont);
                UIManager.put("RadioButton.font", pFont);
                UIManager.put("CheckBox.font", pFont);
                UIManager.put("ColorChooser.font", pFont);
                UIManager.put("ToggleButton.font", pFont);
                UIManager.put("ComboBox.font", pFont);
                UIManager.put("ComboBoxItem.font", pFont);
                UIManager.put("InternalFrame.titleFont", pFont);
                UIManager.put("Label.font", pFont);
                UIManager.put("List.font", pFont);
              UIManager.put("MenuBar.font", pFont);
              UIManager.put("Menu.font", pFont);
              UIManager.put("MenuItem.font", pFont);
              UIManager.put("RadioButtonMenuItem.font", pFont);
              UIManager.put("CheckBoxMenuItem.font", pFont);
              UIManager.put("PopupMenu.font", pFont);
              UIManager.put("OptionPane.font", pFont);
              UIManager.put("Panel.font", pFont);
              UIManager.put("ProgressBar.font", pFont);
              UIManager.put("ScrollPane.font", pFont);
              UIManager.put("Viewport", pFont);
              UIManager.put("TabbedPane.font", pFont);
              UIManager.put("TableHeader.font", pFont);
              UIManager.put("Table.font", pFont);
              UIManager.put("TextField.font", pFont);
              UIManager.put("PasswordFiled.font", pFont);
              UIManager.put("TextArea.font", pFont);
              UIManager.put("TextPane.font", pFont);
              UIManager.put("EditorPane.font", pFont);
              UIManager.put("TitledBorder.font", pFont);
              UIManager.put("ToolBar.font", pFont);
              UIManager.put("ToolTip.font", pFont);
              UIManager.put("Tree.font", pFont);
                }
             }
          3,尋找您的java application 的主程序 
           
            //引入
            import com.jgoodies.plaf.LookUtils;
            import com.jgoodies.plaf.plastic.PlasticLookAndFeel;
           
            //修改程序如下
            //Main method
             public static void main(String[] args) {
              try {
                //原來的,請注釋掉;jbuilder是如此寫法。
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                //修改為
                UIManager.put("ClassLoader", LookUtils.class.getClassLoader());
                UIManager.setLookAndFeel(new PlasticLookAndFeel());
                AppFont.setFont(new java.awt.Font("宋體", 0, 12));
              }
              catch(Exception e) {
                e.printStackTrace();
              }
              new MainApp();
            }
           
           4,附件2 UISample.rar是jbuilder的一個簡單效果的項目。下載地址 http://www.aygfsteel.com/Files/itaogo/UISample.rar

          posted @ 2005-10-09 10:50 鋒出磨礪 閱讀(936) | 評論 (0)編輯 收藏

          一人在辦公室老是放響屁,同事忍不住說:你能不能不出聲?然后便見他坐在那搖來晃去抖個不停,問:干什么?
          回答說:我調(diào)成振動的了

          食人族父子打獵,其子擒一瘦子,其父曰:放,沒肉!其子又擒一胖子,其父曰:放,太膩!其子又擒一美女,
          其父曰:帶回家,晚上把你媽吃了!

          某國有一年經(jīng)濟危機,失業(yè)率特別高,有一個人找工作找了很久也沒有找到。
          這天他在街上轉(zhuǎn)悠,經(jīng)過一個建筑工地時,忽然發(fā)現(xiàn)有一個工人從在建的樓上摔了下來。
          他急忙跑向工頭那兒問:“那個剛掉下來的人的工作我可以接替嗎?”
          工頭說:“不行,他的工作已經(jīng)有人接替了。”
          “誰呀?”
          “就是把他推下來的那個人唄!”

          一青年做事總是毛手毛腳,所以老是失業(yè)。這一次,他又找到一份工作,是替一家古董店干活。
          才上班的第一天,他就不小必把店里的一只較昂貴的玻璃瓶給摔碎了。
          老板很生氣:“這只瓶子的價錢我會在你每個月的工資內(nèi)扣。”
          這青年一聽,松了口氣說:“謝天謝地,我終于找到了一份比較長的工作。”

          某人向朋友傾訴:“有兩次我下班回家,看見太太和一個男人摟抱,你說我該怎么辦?”
          “我不知道,”朋友回答,“但你何不試試加班工作?”

          安妮從幼兒園回家,對媽媽說:“媽媽,捷克向我求婚!”
          媽媽問:“他有固定的工作嗎?” 安妮說:“他是我們班專職擦黑板的!”

          有一個小姐到鄉(xiāng)去旅行時,看到一個小男孩滿身是汗地拉著一頭牛。 
          小姐:“你要把牛牽到那里去?”
          男孩:“到隔壁村去和母牛配種。”
          小姐:“難道這工作不能叫你父親做嗎?”
          男孩:“不行!一定得公牛才行!”

          某單位有專門的制服,但工作人員平時都不大穿。單位領(lǐng)導(dǎo)經(jīng)過研究,決定工作人員在上班時間必須穿制服。
          這可苦了那些愛美的女職員,開始幾天還勉強可以,幾天過后,牛仔褲、健美褲又風(fēng)行起來。當(dāng)然,因為有
          所顧忌,上裝還是裝制服。單位領(lǐng)導(dǎo)見此情況,立即召開大會。會上,領(lǐng)導(dǎo)人氣惱地說道:“現(xiàn)在,老毛病
          又犯了,有些女同志上班只穿上裝,不穿褲子。。。。。”

          一天律師和他妻子走在大街上,迎面走來一個打扮十分妖嬈的女郎并頻頻向律師放電,而且在碰面的時候還熱情的和律師打招呼。
          “你認(rèn)識她?”妻子問。
          “哦,我們只是在工作上的來往。”
          “你的工作還是她的工作?”

          posted @ 2005-10-06 12:07 鋒出磨礪 閱讀(302) | 評論 (0)編輯 收藏

          自從《設(shè)計模式》問世以來,模式就開始流行,有分析模式、設(shè)計模式、開發(fā)模式等等。在業(yè)界比較風(fēng)靡的是設(shè)計模式,就是將以前用到的設(shè)計進行抽取公用之后得到的設(shè)計方案,稱其設(shè)計模式,即模子。我們從以前做過得項目中也可以抽取一些比較通用的業(yè)務(wù)管理,不妨稱其為業(yè)務(wù)模式,比如角色權(quán)限管理,機構(gòu)管理,系統(tǒng)管理(數(shù)據(jù)庫備份,恢復(fù)),消息管理,還有電力設(shè)備臺帳,安全事故(設(shè)備,人員,車輛)等等。我將其分為兩部分(通用業(yè)務(wù)模式,電力業(yè)務(wù)模式),下面將詳細(xì)的介紹這些業(yè)務(wù)模式的業(yè)務(wù)分析和設(shè)計(類設(shè)計,數(shù)據(jù)庫設(shè)計)。

          通用業(yè)務(wù)模式

          l         角色權(quán)限管理

          角色對應(yīng)權(quán)限,兩者是多對多的關(guān)系。

          例如:

          人力資源管理角色所擁有的操作權(quán)限有

          l         機構(gòu)管理

          l         系統(tǒng)管理

          l         消息管理

          l         生成菜單管理

          電力業(yè)務(wù)模式(電廠,省公司,網(wǎng)公司,電力國、省、地方調(diào)度,市局,縣局,電管所)

          l         電力設(shè)備臺帳

          l         安全事故

          l         設(shè)備大修檢修

          posted @ 2005-10-04 17:52 鋒出磨礪 閱讀(494) | 評論 (0)編輯 收藏

          架構(gòu)設(shè)計說明書

          參考文件《需求說明書》

           

          需要考慮的要素

           

          1、需求的符合性:正確性、完整性;功能性需求、非功能性需求

          軟件項目最主要的目標(biāo)是滿足客戶需求。在進行構(gòu)架設(shè)計的時候,大家考慮更多的是使用哪個運行平臺、編成語言、開發(fā)環(huán)境、數(shù)據(jù)庫管理系統(tǒng)等問題,對于和客戶需求相關(guān)的問題考慮不足、不夠系統(tǒng)。如果無論怎么好的構(gòu)架都無法滿足客戶明確的某個功能性需求或非功能性需求,就應(yīng)該與客戶協(xié)調(diào)在項目范圍和需求規(guī)格說明書中刪除這一需求。否則,架構(gòu)設(shè)計應(yīng)以滿足客戶所有明確需求為最基本目標(biāo),盡量滿足其隱含的需求。(客戶的非功能性需求可能包括接口、系統(tǒng)安全性、可靠性、移植性、擴展性等等,在其他小節(jié)中細(xì)述)

          一般來說,功能需求決定業(yè)務(wù)構(gòu)架、非功能需求決定技術(shù)構(gòu)架,變化案例決定構(gòu)架的范圍。需求方面的知識告訴我們,功能需求定義了軟件能夠做些什么。我們需要根據(jù)業(yè)務(wù)上的需求來設(shè)計業(yè)務(wù)構(gòu)架,以使得未來的軟件能夠滿足客戶的需要。非功能需求定義了一些性能、效率上的一些約束、規(guī)則。而我們的技術(shù)構(gòu)架要能夠滿足這些約束和規(guī)則。變化案例是對未來可能發(fā)生的變化的一個估計,結(jié)合功能需求和非功能需求,我們就可以確定一個需求的范圍,進而確定一個構(gòu)架的范圍。(此段From林星)

          這里講一個前幾年因客戶某些需求錯誤造成構(gòu)架設(shè)計問題而引起系統(tǒng)性能和可靠性問題的小小的例子:此系統(tǒng)的需求本身是比較簡單的,就是將某城市的某業(yè)務(wù)的全部歷史檔案卡片掃描存儲起來,以便可以按照姓名進行查詢。需求階段客戶說卡片大約有20萬張,需求調(diào)研者出于對客戶的信任沒有對數(shù)據(jù)的總量進行查證。由于是中小型數(shù)據(jù)量,并且今后數(shù)據(jù)不會增加,經(jīng)過計算20萬張卡片總體容量之后,決定使用一種可以單機使用也可以聯(lián)網(wǎng)的中小型數(shù)據(jù)庫管理系統(tǒng)。等到系統(tǒng)完成開始錄入數(shù)據(jù)時,才發(fā)現(xiàn)數(shù)據(jù)至少有60萬,這樣使用那種中小型數(shù)據(jù)庫管理系統(tǒng)不但會造成系統(tǒng)性能的問題,而且其可靠性是非常脆弱的,不得不對系統(tǒng)進行重新設(shè)計。從這個小小的教訓(xùn)可以看出,需求階段不僅對客戶的功能需求要調(diào)查清楚,對于一些隱含非功能需求的一些數(shù)據(jù)也應(yīng)當(dāng)調(diào)查清楚,并作為構(gòu)架設(shè)計的依據(jù)。

          對于功能需求的正確性,在構(gòu)架設(shè)計文檔中可能不好驗證(需要人工、費力)。對于功能需求完整性,就應(yīng)當(dāng)使用需求功能與對應(yīng)模塊對照表來跟蹤追溯。對于非功能需求正確性和完整性,可以使用需求非功能與對應(yīng)設(shè)計策略對照表來跟蹤追溯評估。

          軟件設(shè)計工作只有基于用戶需求,立足于可行的技術(shù)才有可能成功。

          2
          、總體性能

          性能其實也是客戶需求的一部分,當(dāng)然可能是明確的,也有很多是隱含的,這里把它單獨列出來在說明一次。性能是設(shè)計方案的重要標(biāo)準(zhǔn),性能應(yīng)考慮的不是單臺客戶端的性能,而是應(yīng)該考慮系統(tǒng)總的綜合性能;

          性能設(shè)計應(yīng)從以下幾個方面考慮:內(nèi)存管理、數(shù)據(jù)庫組織和內(nèi)容、非數(shù)據(jù)庫信息、任務(wù)并行性、網(wǎng)絡(luò)多人操作、關(guān)鍵算法、與網(wǎng)絡(luò)、硬件和其他系統(tǒng)接口對性能的影響;

          幾點提示:算法優(yōu)化及負(fù)載均衡是性能優(yōu)化的方向。經(jīng)常要調(diào)用的模塊要特別注意優(yōu)化。占用內(nèi)存較多的變量在不用時要及時清理掉。需要下載的網(wǎng)頁主題文件過大時應(yīng)當(dāng)分解為若干部分,讓用戶先把主要部分顯示出來。

          3
          、運行可管理性

          系統(tǒng)的構(gòu)架設(shè)計應(yīng)當(dāng)為了使系統(tǒng)可以預(yù)測系統(tǒng)故障,防患于未然。現(xiàn)在的系統(tǒng)正逐步向復(fù)雜化、大型化發(fā)展,單靠一個人或幾個人來管理已顯得力不從心,況且對于某些突發(fā)事件的響應(yīng),人的反應(yīng)明顯不夠。因此通過合理的系統(tǒng)構(gòu)架規(guī)劃系統(tǒng)運行資源,便于控制系統(tǒng)運行、監(jiān)視系統(tǒng)狀態(tài)、進行有效的錯誤處理;為了實現(xiàn)上述目標(biāo),模塊間通信應(yīng)當(dāng)盡可能簡單,同時建立合理詳盡的系統(tǒng)運行日志,系統(tǒng)通過自動審計運行日志,了解系統(tǒng)運行狀態(tài)、進行有效的錯誤處理;(運行可管理性與可維護性不同)

          4
          、與其他系統(tǒng)接口兼容性(解釋略)

          5
          、與網(wǎng)絡(luò)、硬件接口兼容性及性能(解釋略)

          6
          、系統(tǒng)安全性

          隨著計算機應(yīng)用的不斷深入和擴大,涉及的部門和信息也越來越多,其中有大量保密信息在網(wǎng)絡(luò)上傳輸,所以對系統(tǒng)安全性的考慮已經(jīng)成為系統(tǒng)設(shè)計的關(guān)鍵,需要從各個方面和角度加以考慮,來保證數(shù)據(jù)資料的絕對安全。

          7
          、系統(tǒng)可靠性

          系統(tǒng)的可靠性是現(xiàn)代信息系統(tǒng)應(yīng)具有的重要特征,由于人們?nèi)粘5墓ぷ鲗ο到y(tǒng)依賴程度越來越多,因此系統(tǒng)的必須可靠。系統(tǒng)構(gòu)架設(shè)計可考慮系統(tǒng)的冗余度,盡可能地避免單點故障。系統(tǒng)可靠性是系統(tǒng)在給定的時間間隔及給定的環(huán)境條件下,按設(shè)計要求,成功地運行程序的概率。成功地運行不僅要保證系統(tǒng)能正確地運行,滿足功能需求,還要求當(dāng)系統(tǒng)出現(xiàn)意外故障時能夠盡快恢復(fù)正常運行,數(shù)據(jù)不受破壞。

          8
          、業(yè)務(wù)流程的可調(diào)整性

          應(yīng)當(dāng)考慮客戶業(yè)務(wù)流程可能出現(xiàn)的變化,所以在系統(tǒng)構(gòu)架設(shè)計時要盡量排除業(yè)務(wù)流程的制約,即把流程中的各項業(yè)務(wù)結(jié)點工作作為獨立的對象,設(shè)計成獨立的模塊或組件,充分考慮他們與其他各種業(yè)務(wù)對象模塊或組件的接口,在流程之間通過業(yè)務(wù)對象模塊的相互調(diào)用實現(xiàn)各種業(yè)務(wù),這樣,在業(yè)務(wù)流程發(fā)生有限的變化時(每個業(yè)務(wù)模塊本身的業(yè)務(wù)邏輯沒有變的情況下),就能夠比較方便地修改系統(tǒng)程序模塊或組件間的調(diào)用關(guān)系而實現(xiàn)新的需求。如果這種調(diào)用關(guān)系被設(shè)計成存儲在配置庫的數(shù)據(jù)字典里,則連程序代碼都不用修改,只需修改數(shù)據(jù)字典里的模塊或組件調(diào)用規(guī)則即可。

          9
          、業(yè)務(wù)信息的可調(diào)整性

          應(yīng)當(dāng)考慮客戶業(yè)務(wù)信息可能出現(xiàn)的變化,所以在系統(tǒng)構(gòu)架設(shè)計時必須盡可能減少因為業(yè)務(wù)信息的調(diào)整對于代碼模塊的影響范圍。

          10
          、使用方便性

          使用方便性是不須提及的必然的需求,而使用方便性與系統(tǒng)構(gòu)架是密切相關(guān)的。WinCE1.0)的失敗和后來改進版本的成功就說明了這個問題。WinCE1.0)有太多層次的視窗和菜單,而用戶則更喜歡簡單的界面和快捷的操作。失敗了應(yīng)當(dāng)及時糾正,但最好不要等到失敗了再來糾正,這樣會浪費巨大的財力物力,所以在系統(tǒng)構(gòu)架階段最好能將需要考慮的因素都考慮到。當(dāng)然使用方便性必須與系統(tǒng)安全性協(xié)調(diào)平衡統(tǒng)一,使用方便性也必須與業(yè)務(wù)流程的可調(diào)整性和業(yè)務(wù)信息的可調(diào)整性協(xié)調(diào)平衡統(tǒng)一。滿足用戶的需求,便于用戶使用,同時又使得操作流程盡可能簡單。這就是設(shè)計之本。

          11
          、構(gòu)架樣式的一致性

          軟件系統(tǒng)的構(gòu)架樣式有些類似于建筑樣式(如中國式、哥特式、希臘復(fù)古式)。軟件構(gòu)架樣式可分為數(shù)據(jù)流構(gòu)架樣式、調(diào)用返回構(gòu)架樣式、獨立組件構(gòu)架樣式、以數(shù)據(jù)為中心的構(gòu)架樣式和虛擬機構(gòu)架樣式,每一種樣式還可以分為若干子樣式。構(gòu)架樣式的一致性并不是要求一個軟件系統(tǒng)只能采用一種樣式,就像建筑樣式可以是中西結(jié)合的,軟件系統(tǒng)也可以有異質(zhì)構(gòu)架樣式(分為局部異質(zhì)、層次異質(zhì)、并行異質(zhì)),即多種樣式的綜合,但這樣的綜合應(yīng)該考慮其某些方面的一致性和協(xié)調(diào)性。每一種樣式都有其使用的時機,應(yīng)當(dāng)根據(jù)系統(tǒng)最強調(diào)的質(zhì)量屬性來選擇。

          四、源代碼的組織結(jié)構(gòu)方面的考慮:

          1
          、開發(fā)可管理性

          便于人員分工(模塊獨立性、開發(fā)工作的負(fù)載均衡、進度安排優(yōu)化、預(yù)防人員流動對開發(fā)的影響:一個好的構(gòu)架同時應(yīng)有助于減少項目組的壓力和緊張,提高軟件開發(fā)效率)、利于配置管理、大小的合理性、適度復(fù)雜性;

          1
          )便于人員分工-模塊獨立性、層次性

          模塊獨立性、層次性是為了保證項目開發(fā)成員工作之間的相對獨立性,模塊聯(lián)結(jié)方式應(yīng)該是縱向而不是橫向, 模塊之間應(yīng)該是樹狀結(jié)構(gòu)而不是網(wǎng)狀結(jié)構(gòu)或交叉結(jié)構(gòu),這樣就可以把開發(fā)人員之間的通信、模塊開發(fā)制約關(guān)系減到最少。同時模塊獨立性也比較利于配置管理工作的進行。現(xiàn)在有越來越多的的軟件開發(fā)是在異地進行,一個開發(fā)組的成員可能在不同城市甚至在不同國家,因此便于異地開發(fā)的人員分工與配置管理的源代碼組織結(jié)構(gòu)是非常必要的。

          2
          )便于人員分工-開發(fā)工作的負(fù)載均衡

          不僅僅是開發(fā)出來的軟件系統(tǒng)需要負(fù)載均衡,在開發(fā)過程中開發(fā)小組各成員之間工作任務(wù)的負(fù)載均衡也是非重要的。所謂工作任務(wù)的負(fù)載均衡就是通過合理的任務(wù)劃分按照開發(fā)人員特點進行分配任務(wù),盡量讓項目組中的每個人每段時間都有用武之地。這就需要在構(gòu)架設(shè)計時應(yīng)當(dāng)充分考慮項目組手頭的人力資源,在實現(xiàn)客戶需求的基礎(chǔ)上實現(xiàn)開發(fā)工作的負(fù)載均衡,以提高整體開發(fā)效率。

          3
          )便于人員分工-進度安排優(yōu)化;

          進度安排優(yōu)化的前提是模塊獨立性并搞清楚模塊開發(fā)的先后制約關(guān)系。利用工作分解結(jié)構(gòu)對所有程序編碼工作進行分解,得到每一項工作的輸入、輸出、所需資源、持續(xù)時間、前期應(yīng)完成的工作、完成后可以進行的工作。然后預(yù)估各模塊需要時間,分析各模塊的并行與串行(順序制約),繪制出網(wǎng)絡(luò)圖,找出影響整體進度的關(guān)鍵模塊,算出關(guān)鍵路徑,最后對網(wǎng)絡(luò)圖進行調(diào)整,以使進度安排最優(yōu)化。

          有個家喻戶曉的智力題叫烤肉片策略:約翰遜家戶外有一個可以同時烤兩塊肉片的烤肉架,烤每塊肉片的每一面需要10分鐘,現(xiàn)要烤三塊肉片給饑腸轆轆急不可耐的一家三口。問題是怎樣才能在最短的時間內(nèi)烤完三片肉。一般的做法花20分鐘先烤完前兩片,再花20分鐘烤完第三片。有一種更好的方法可以節(jié)省10分鐘,大家想想。

          4
          )便于人員分工-預(yù)防員工人員流動對開發(fā)的影響

          人員流動在軟件行業(yè)是司空見慣的事情,已經(jīng)是一個常見的風(fēng)險。作為對這一風(fēng)險的有效的防范對策之一,可以在構(gòu)架設(shè)計中考慮到并預(yù)防員工人員流動對開發(fā)的影響。主要的思路還是在模塊的獨立性上追求高內(nèi)聚低耦合),組件化是目前流行的趨勢。

          5
          )利于配置管理(獨立性、層次性)

          利于配置管理與利于人員分工有一定的聯(lián)系。除了邏輯上的模塊組件要利于人員分工外,物理上的源代碼層次結(jié)構(gòu)、目錄結(jié)構(gòu)、各模塊所處源代碼文件的部署也應(yīng)當(dāng)利于人員分工和配置管理。(盡管現(xiàn)在配置管理工具有較強大的功能,但一個清楚的源碼分割和模塊分割是非常有好處的)。

          6
          )大小的合理性與適度復(fù)雜性

          大小的合理性與適度復(fù)雜性可以使開發(fā)工作的負(fù)載均衡,便于進度的安排,也可以使系統(tǒng)在運行時減少不必要的內(nèi)存資源浪費。對于代碼的可閱讀性和系統(tǒng)的可維護性也有一定的好處。另外,過大的模塊常常是系統(tǒng)分解不充分,而過小的模塊有可能降低模塊的獨立性,造成系統(tǒng)接口的復(fù)雜。

          2
          、可維護性

          便于在系統(tǒng)出現(xiàn)故障時及時方便地找到產(chǎn)生故障的原因和源代碼位置,并能方便地進行局部修改、切割;(可維護性與運行可管理性不同)

          3
          、可擴充性:系統(tǒng)方案的升級、擴容、擴充性能

          系統(tǒng)在建成后會有一段很長的運行周期,在該周期內(nèi),應(yīng)用在不斷增加,應(yīng)用的層次在不斷升級,因此采用的構(gòu)架設(shè)計等方案因充分考慮升級、擴容、擴充的可行性和便利

          4
          、可移植性

          不同客戶端、應(yīng)用服務(wù)器、數(shù)據(jù)庫管理系統(tǒng):如果潛在的客戶使用的客戶端可能使用不同的操作系統(tǒng)或瀏覽器,其可移植性必須考慮客戶端程序的可移植性,或盡量不使業(yè)務(wù)邏輯放在客戶端;數(shù)據(jù)處理的業(yè)務(wù)邏輯放在數(shù)據(jù)庫管理系統(tǒng)中會有較好的性能,但如果客戶群中不能確定使用的是同一種數(shù)據(jù)庫管理系統(tǒng),則業(yè)務(wù)邏輯就不能數(shù)據(jù)庫管理系統(tǒng)中;

          達(dá)到可移植性一定要注重標(biāo)準(zhǔn)化和開放性:只有廣泛采用遵循國際標(biāo)準(zhǔn),開發(fā)出開放性強的產(chǎn)品,才可以保證各種類型的系統(tǒng)的充分互聯(lián),從而使產(chǎn)品更具有市場競爭力,也為未來的系統(tǒng)移植和升級擴展提供了基礎(chǔ)。

          5
          、需求的符合性

          從源代碼的組織結(jié)構(gòu)看需求的符合型主要考慮針對用戶需求可能的變化的軟件代碼及構(gòu)架的最小冗余(同時又要使得系統(tǒng)具有一定的可擴展性)。

          構(gòu)架工作應(yīng)該在需求開發(fā)完成約80%的時候開始進行,不必等到需求開發(fā)全部完成,需要項目經(jīng)理以具體的判斷來評估此時是否足以開始構(gòu)建軟件構(gòu)架。

          給出一致的輪廓:系統(tǒng)概述。一個系統(tǒng)構(gòu)架需要現(xiàn)有概括的描述,開發(fā)人員才能從上千個細(xì)節(jié)甚至數(shù)十個模塊或?qū)ο箢愔薪⒁恢碌妮喞?/SPAN>

          構(gòu)架的目標(biāo)應(yīng)該能夠清楚說明系統(tǒng)概念,構(gòu)架應(yīng)盡可能簡化,最好的構(gòu)架文件應(yīng)該簡單、簡短,清晰而不雜亂,解決方案自然。

          構(gòu)架應(yīng)單先定義上層的主要子系統(tǒng),應(yīng)該描述各子系統(tǒng)的任務(wù),并提供每個子系統(tǒng)中各模塊或?qū)ο箢惖牡某醪搅斜怼?/SPAN>

          構(gòu)架應(yīng)該描述不同子系統(tǒng)間相互通信的方式,而一個良好的構(gòu)架應(yīng)該將子系統(tǒng)間的通信關(guān)系降到最低。

          成功構(gòu)架的一個重要特色,在于標(biāo)明最可能變更的領(lǐng)域,應(yīng)當(dāng)列出程序中最可能變更的部分,說明構(gòu)架的其他部分如何應(yīng)變。

          復(fù)用分析、外購:縮短軟件開發(fā)周期、降低成本的有效方案未必是自行開發(fā)軟件,可以對現(xiàn)有軟件進行復(fù)用或進行外購。應(yīng)考慮其對構(gòu)架的影響。

          除了系統(tǒng)組織的問題,構(gòu)架應(yīng)重點考慮對于細(xì)節(jié)全面影響的設(shè)計決策,深入這些決策領(lǐng)域:外部軟件接口(兼容性、通信方式、傳遞數(shù)據(jù)結(jié)構(gòu))、用戶接口(用戶接口和系統(tǒng)層次劃分)、數(shù)據(jù)庫組織和內(nèi)容、非數(shù)據(jù)庫信息、關(guān)鍵算法、內(nèi)存管理(配置策略)、并行性、安全性、可移植性、網(wǎng)絡(luò)多人操作、錯誤處理。

          要保證需求的可追蹤性,即保證每個需求功能都有相應(yīng)模塊去實現(xiàn)。

          構(gòu)架不能只依據(jù)靜態(tài)的系統(tǒng)目標(biāo)來設(shè)計,也應(yīng)當(dāng)考慮動態(tài)的開發(fā)過程,如人力資源的情況,進度要求的情況,開發(fā)環(huán)境的滿足情況。構(gòu)架必須支持階段性規(guī)劃,應(yīng)該能夠提供階段性規(guī)劃中如何開發(fā)與完成的方式。不應(yīng)該依賴無法獨立運行的子系統(tǒng)構(gòu)架。將系統(tǒng)各部分的、依賴關(guān)系找出來,形成一套開發(fā)計劃。

           

          系統(tǒng)概述

           

          名詞解釋

           

           

          業(yè)務(wù)構(gòu)架

              模塊定義   模塊獨立性、層次性  

          穩(wěn)定的需求

          不穩(wěn)定需求

          不穩(wěn)定需求造成的后果

          應(yīng)對方案

          使用方便性

          技術(shù)構(gòu)架

               運行平臺、接口、系統(tǒng)安全性、可靠性、移植性、擴展性

          人力組織計劃

                人力資源分析

                進度安排優(yōu)化

               開發(fā)工作的負(fù)載均衡

                預(yù)防員工人員流動對開發(fā)的影響應(yīng)對

               

          posted @ 2005-10-04 17:49 鋒出磨礪 閱讀(1931) | 評論 (0)編輯 收藏

              05國慶,陰雨連連,待到雨停。因辦了旅游年卡,長假唯有青龍寺可去,陪內(nèi)人去覽。
              記憶深刻的是《樂游園》一詩。

              樂游園.
               李商隱.
               向晚意不適,. 驅(qū)車登古原。 夕陽無限好,只是近黃昏。

               如今四處高樓林立,雖登高此處,始終無前人的感懷。始終讓人感了沒有了我中華大文化,在倭國的小文化
               籠罩下,處處櫻花,這里那里都是日文。看了相關(guān)介紹,明明是日本人是徒弟來學(xué)我中華。怎么就讓倭國人
               用金錢改變了味道呢。失敗。
              

          posted @ 2005-10-04 17:44 鋒出磨礪 閱讀(463) | 評論 (2)編輯 收藏

          svg背景

          svg描述

          什么是SVG

          SVG,是可任意放縮矢量圖像格式(Scalable Vector Graphics)的簡稱。它基于XML(可擴展標(biāo)識語言),是一個全新的標(biāo)準(zhǔn)開放的矢量圖像和動畫格式。SVG不同于傳統(tǒng)的二元(平面)圖像和動畫制作,它使用簡單的一元(文本)語句,完成矢量圖像,以及諸如色彩變化,對象運動,濾鏡和遮照,音效添加等各式動畫效果。SVG創(chuàng)造一個利用純文本完成網(wǎng)絡(luò)多媒體的神話。

          SVG的特點

              矢量圖像

            圖像通常分為矢量圖像和位圖圖像。
            矢量圖像利用點和線等矢量化的數(shù)據(jù)描述圖像,并在圖形中包含色彩和位置信息。矢量圖像的最大優(yōu)點是"分辨率獨立"。當(dāng)顯示或輸出圖像時,圖像的品質(zhì)不受設(shè)備的分辨率影響,能夠提供高清晰的畫面。矢量圖相對位圖而言,更適合用于直接打印、印刷或輸出到一些小型設(shè)備如手提裝置上。放大和縮小矢量圖不會影響圖像品質(zhì)。
          而位圖圖像則使用我們稱為像素的一格一格的小點來描述圖像。計算機的屏幕其實就是一張包含大量像素點的網(wǎng)格。位圖圖像受到分辨率的影響。因此常常出現(xiàn)圖像邊緣鋸齒和放大后"馬賽克"現(xiàn)象。相對而言,位圖需要的存儲空間要比矢量圖更多。
            SVG作為矢量圖像格式,同樣具備了矢量圖的諸多優(yōu)點,更適合在網(wǎng)絡(luò)中傳輸和應(yīng)用。SVG除了矢量圖的優(yōu)勢,也同樣保持了對位圖圖像的正確表達(dá)功能。使用XML中的XLINK(擴展鏈接)標(biāo)簽,SVG也可以在圖像中調(diào)用位圖圖像。

            矢量濾鏡

            雖然SVG圖像做為矢量圖格式,具有很多優(yōu)點。但我們也看到,仍然有很多的圖像設(shè)計師傾向于使用位圖創(chuàng)作。這是因為位圖常常可以使用大量的濾鏡效果、紋理貼圖和空間幻影等,加強圖像的視覺效果。
          但因為位圖的創(chuàng)作是直接針對像素操作,所以,一旦完成效果的添加,設(shè)計師幾乎無法再進行修改。例如,輸出一幅霧化效果的位圖圖像,您已經(jīng)無法再恢復(fù)原來清晰的圖像。

            而如果使用SVG支持的矢量濾鏡,設(shè)計師同樣可以創(chuàng)作出大量流行的和普遍的濾鏡效果。并且,這樣的濾鏡效果是可調(diào)整的。因為SVG的矢量濾鏡并不直接針對像素進行操作,而是作為某一個對象的獨立屬性保存在文件中。修改圖像效果只需要重新調(diào)整這些屬性,就可以完成對濾鏡的修改、替換和刪除,非常的便捷。SVG的矢量濾鏡對于遠(yuǎn)程協(xié)作和二次編輯,提供了極大的自由度。

            關(guān)于濾鏡的實例,請參看<<SVG中文教程>>

            基于
          XML

            SVG的語法和結(jié)構(gòu)基于XML(可擴展標(biāo)識語言)。XML是下一代的網(wǎng)絡(luò)開發(fā)語言,它提供的功能遠(yuǎn)遠(yuǎn)超過了目前使用的HTML(超文本鏈接語言)。當(dāng)一個網(wǎng)站變得越來越復(fù)雜的同時,為了獲得更好的管理和交互,網(wǎng)站開發(fā)者同樣需要一個比HTML更優(yōu)秀的網(wǎng)絡(luò)開發(fā)語言和工具。這就是XML

            與HTML不同,XML完全分離了網(wǎng)站內(nèi)容和網(wǎng)站構(gòu)架。通過定義結(jié)構(gòu)數(shù)據(jù)類型,用戶端應(yīng)用程序能夠顯示和處理,而不僅僅像HTML那樣僅僅能顯示,網(wǎng)頁或數(shù)據(jù)。例如,一個利用XML標(biāo)簽定義的電話號碼,可以根據(jù)需要,由瀏覽器進行撥號。XML所具有優(yōu)秀的擴展性,使得它在網(wǎng)絡(luò)工業(yè)應(yīng)用上,比HTML有著更大的空間和前景。
          SVG
          的開發(fā)和創(chuàng)作是基于XML的,因此,我們也能在SVG中開發(fā)出更多新的功能以提供更多的網(wǎng)絡(luò)服務(wù)。例如,制作智能化的數(shù)據(jù)圖像。圖像中的數(shù)據(jù)可以根據(jù)需要,由應(yīng)用程序讀取、修改和統(tǒng)計并最終在圖像中顯示。這些應(yīng)用是目前HTML及相關(guān)圖像技術(shù)遠(yuǎn)不可及的。

            文本格式

            SVG文件是一元(文本)格式的。SVG圖像和動畫具有了以下文本格式所具備的特點:
            1、作為基于文本的格式,SVG圖像中的文字也是文本格式。這不同于現(xiàn)在圖像和動畫中的文字。目前圖像和動畫中的文字實質(zhì)上都是圖像。因此,SVG中的文字可以被網(wǎng)絡(luò)搜索引擎做為關(guān)鍵詞搜尋。利用這一性質(zhì),通過SVG中定義的文字,就可以制作出非常高效的圖像搜索引擎。圖像中的文字也可以被用戶瀏覽器查找。
            2SVG圖像可以方便的由程序語言來動態(tài)的生成。例如使用JavaScript,perl,Java等語言,開發(fā)自動圖像和動畫生成系統(tǒng)。這對于一些數(shù)據(jù)庫制表是非常實用的。在線圖像還可以根據(jù)后臺數(shù)據(jù)庫中的關(guān)系量實時的進行動態(tài)改變。
            3SVG完全支持DOM(文檔物件模型)。因而SVG以及SVG中的對象可以通過腳本語言接受外部事件的驅(qū)動,例如鼠標(biāo)動作、鍵盤動作等,實現(xiàn)對自身或?qū)ζ渌锛D像的控制,制作交互式的圖像和動畫。

            4、因為是文本格式,SVG可以很好的跨平臺工作,同時,還可以解決相關(guān)的外部輸出、色彩模式、網(wǎng)絡(luò)帶寬等問題。

            簡言之,文本格式使得SVG獲得了與其它技術(shù)標(biāo)準(zhǔn)更大的交互和融合的特點。


            與GIFJPEG比較

            GIFJPEG都是目前網(wǎng)絡(luò)普遍使用的位圖格式。SVGGIFJPEG有很多獨特的優(yōu)勢:
            1、具有很高的圖像品質(zhì)。因為是矢量圖像,分辨率獨立,用戶可以自由的放縮圖像而不會破壞圖像的清晰度。這對于查看某些圖像細(xì)節(jié)例如數(shù)據(jù)圖像中的數(shù)字,非常的有用。
            2、圖像中的文字獨立。如上一小節(jié)所述,SVG圖像中的文字獨立于圖像,可以進行文本編輯和查詢。
            3、較小文件尺寸。因為基于矢量格式,由語句完成圖像的保存,SVG圖像相比較GIFJPEG具有更小的文件大小,下載更加迅速。
            4、色彩適應(yīng)性更強。SVG圖像具有一個1600萬色彩的調(diào)色板,支持ICC(國際色彩協(xié)會)色彩標(biāo)準(zhǔn),支持RGB色彩模式。

            5、可交互性。SVG基于XML,因而能輕易的制作強大的動態(tài)交互。SVG圖像能對用戶動作做出不同響應(yīng),例如高亮,聲效,特效,動畫等,體現(xiàn)了網(wǎng)絡(luò)互動的本質(zhì)。而GIFJPEG都不可以產(chǎn)生交互。


            與SWF比較

            SWF文件格式是Flash的輸出文件格式。從某種意義上,SWFSVG有很多驚人的相似之處。但是,盡管Flash憑借其優(yōu)越的表現(xiàn)形式和便利的創(chuàng)作工具成為目前網(wǎng)絡(luò)動畫設(shè)計的首選,SWF日益在網(wǎng)絡(luò)中普及,但我們也應(yīng)該看到,與SVG相比較,SWF存在著以下的不足:
            1SWF是一個非開放標(biāo)準(zhǔn)。這就意味著該技術(shù)掌握在個體手中,技術(shù)的發(fā)展受到方方面面的限制。同時,SWF與其他的開放標(biāo)準(zhǔn)也沒有完整的融合方案。盡管SWF目前已經(jīng)提供了對XML的支持,但這種支持是單方面的。隨著XML及其他開放標(biāo)準(zhǔn)的發(fā)展,SWF的不協(xié)調(diào)性將日益顯著。
            2SWF的可編輯性不如SVGSWF做為最終的動畫生成格式,其創(chuàng)作過程封裝在SWF文件中,幾乎無法再進行二次編輯。同時,SWF也不提供對文本格式的支持,因此,無法獲得類似SVG的查詢圖像中文字的功能。

           

          svg工具分析

          SVG創(chuàng)作工具

              目前的SVG創(chuàng)作工具還處于開發(fā)和研制階段,仍然沒有一款非常成熟的包含靜態(tài),動態(tài),交互功能創(chuàng)作的軟件.這里介紹幾個目前可以進行一些研究和測試的SVG創(chuàng)作軟件.

            Adobe Illustator

            AdobeSVG的開發(fā)中扮演了重要角色.Adobe Illustrator 9.0是較早的一款結(jié)合SVG功能的矢量創(chuàng)作軟件.目前可以進行靜態(tài)圖形的創(chuàng)作和部分交互功能的實現(xiàn).其交互功能需要手寫javascript腳本.

            創(chuàng)作AI圖像后,選擇File->Export(文件->輸出),選擇文件類型SVG,SVG Option面板中設(shè)置相關(guān)屬性,可以輸出SVG文件,關(guān)于屬性設(shè)置,請參看<<SVG中文教程>>.

            Web Draw

              WebDrawJasc Software按照W3C組織制定的SVG規(guī)范書開發(fā)的矢量圖像和動畫制作工具,專業(yè)應(yīng)用于SVG創(chuàng)作.WebDraw通過直接畫布拖拽繪圖以及濾鏡效果模塊化組合,可以避免手寫源代碼.同時提供源代碼視圖窗口,支持后續(xù)源代碼編輯和修改.
            軟件的整體布局類似于目前許多的圖形創(chuàng)作軟件.與職業(yè)的矢量創(chuàng)作軟件Adobe IllustratorCorel Draw相比較,Web Draw在功能上還不足以抗衡,但作為專業(yè)開發(fā)SVG的創(chuàng)作工具,也許可以預(yù)想,經(jīng)過一段時間的積累,它將成為下一個成功的Fireworks.(Fireworks成功的開發(fā)了PNG格式
          .)
            最新版本是Preview Release 4.目前還不支持動態(tài)SVG效果.另外, 應(yīng)用濾鏡效果并不能在畫布真實表達(dá)輸出后的SVG圖像
          .
            下載
          (4.45M):
            http://www.jasc.com/webdraw.asp (國外
          )
            http://www.2svg.com/ (國內(nèi))


          Web Engine

          IMS Web Engine (Interactive Multimedia System)Virtural Mechanics開發(fā)的一款網(wǎng)頁創(chuàng)作軟件,主要應(yīng)用于創(chuàng)作靜態(tài)和動態(tài)的HTML,DHTMLSVG頁面.Web Engine是目前極少數(shù)不需要通過手寫代碼即可完成SVG動態(tài)交互創(chuàng)作的工具.它的精靈向?qū)Э梢院芸斓亩x簡單的交互動作.
            Web Engine的界面比較粗曠,或者說不是很精細(xì),很多操作是雙擊對象彈出面板,調(diào)整選項,這有點像當(dāng)時的Flash3.04.0.Web Engine有一個比較不足的地方,給設(shè)計者帶來很大的限制,就是沒有提供源代碼視圖,無法直接進行源代碼的修改和編輯
          .
            目前的版本是
          Version 2 Beta.
            下載
          (3.86M):
            http://www.virtualmechanics.com/(國外
          )
            http://www.2svg.com/ (國內(nèi))

           

          市場分析

          SVG的應(yīng)用價值

              網(wǎng)絡(luò)發(fā)展的需要,與其他開放標(biāo)準(zhǔn)兼容

            如同PNG作為W3C的位圖圖像工業(yè)標(biāo)準(zhǔn),SVG是網(wǎng)絡(luò)中解決矢量圖像的工業(yè)標(biāo)準(zhǔn).SVG以前,除了Macromedia開發(fā)了SWF作為矢量的網(wǎng)絡(luò)文件格式,還沒有其他的矢量文件在網(wǎng)絡(luò)中應(yīng)用.因為位圖文件受到本身的很多局限,在圖形印刷和傳輸中,矢量文件有很大的應(yīng)用價值,所以,必定會有相應(yīng)的矢量標(biāo)準(zhǔn)得到開發(fā)和應(yīng)用,這就是SVG.
            作為W3C的推薦格式,SVG與現(xiàn)有的其他開放標(biāo)準(zhǔn)有很好的兼容性.這些標(biāo)準(zhǔn)包括DOM1DOM2CSSXMLXPointerXSLTXSLSMILHTMLXHTML.SVG與其他組織的標(biāo)準(zhǔn)化技術(shù)也能很好的協(xié)調(diào)一致,如ICCURIUNICODEsRGBECMAScript/JavaScript
          Java.
            使用SVG并不意味著我們將從此放棄現(xiàn)在的網(wǎng)絡(luò)圖像技術(shù)如GIFJPEGSWF.相比較這些目前有普遍應(yīng)用的文件格式,SVG更適合網(wǎng)絡(luò)發(fā)展的需求,開發(fā)和應(yīng)用SVG意味著獲得一個更優(yōu)秀的工具和方法
          .

            數(shù)據(jù)表格,圖像地圖


            在應(yīng)用領(lǐng)域,SVG可以非常適宜的應(yīng)用在數(shù)據(jù)表格和圖像地圖中.SVG的源文件中,通過變量可以很方便的控制需要的圖形生成.這就為網(wǎng)絡(luò)圖像數(shù)據(jù)表格提供了很大的應(yīng)用前景.一個簡單的例子,現(xiàn)有的asp可以方便的構(gòu)建動態(tài)數(shù)據(jù)網(wǎng)頁,利用SVG,則可以同樣方便的繪制動態(tài)數(shù)據(jù)圖像,例如數(shù)據(jù)分析中的柱狀圖和餅狀圖.
            制作圖像地圖同樣是SVG的一大優(yōu)勢.由于SVG是矢量格式,圖像可以在任何顯示分辨率下獲得同樣的圖像效果,文件放大觀看時也不會有任何的品質(zhì)損失,因而可以完全可以制作這樣的圖像地圖,其中包含了一個城市所有的地理信息,文件可以根據(jù)觀看這不同的需要,對不同的地區(qū)進行放大顯示,同時,每一個地理名詞又可以獨立的包含一段文字說明,或者包含相應(yīng)的地理數(shù)據(jù),但用戶需要時,可以通過點擊地理名詞獲得解釋說明.這樣的圖像地圖文件的文件大小也僅僅是K字節(jié)級別
          .

            無線設(shè)備的需求


            SVG另一個非常誘人的應(yīng)用前景就是開發(fā)無線設(shè)備的圖形和動畫.例如目前使用的手機產(chǎn)品,其圖像主要是WBMP.這種格式因為是位圖文件,受到傳輸大小的限制,同時不提供彩色的色彩模式,所以顯得很呆板.而如果利用SVG,只要在無線設(shè)備中安裝一個文本解析器,就可以實現(xiàn)對SVG文件的識別和顯示,同時,因為是矢量的文本文件,文件的尺寸不會很大,非常適合無線產(chǎn)品的網(wǎng)絡(luò)傳輸.SVG還提供動畫和多媒體編輯功能,所以可以支持二維的平面動畫,支持聲音文件和視頻文件的播放.結(jié)合一些其他的技術(shù),例如SMIL(多媒體同步整合語言),就可以實現(xiàn)創(chuàng)建一個非常理想的多媒體無線終端解決方案.


            圖像搜索引擎


            不同于現(xiàn)在的二維圖像,SVG是一個可實現(xiàn)交互和查詢的文件格式.SVG圖像中,信息是一元代碼形式的,是開放形式的.文字獨立于圖形信息.這就為圖像搜索和查詢提供了可能.例如,在一個SVG動畫中,通過搜索某一個關(guān)鍵字,就可以在圖像中查詢到對應(yīng)的信息.而這對于同樣是矢量圖像和動畫格式的SWF就不可能實現(xiàn).依據(jù)SVG的這種交互性,可以創(chuàng)建大型的圖像搜索引擎.

            網(wǎng)頁設(shè)計思想的改變


            采用SVG進行網(wǎng)頁設(shè)計,是下一代的網(wǎng)頁設(shè)計思想.現(xiàn)在的網(wǎng)頁設(shè)計,通常是在位圖圖像軟件中繪制好整體頁面圖像,然后進行圖像切割,最后完成頁面的文字編輯.通常這樣的工作是很繁瑣的,進行二次修改也很不簡便.而利用SVG,則可以實現(xiàn)頁面圖形設(shè)計和文字編輯的一步完成.如果要進行遠(yuǎn)程協(xié)作完成網(wǎng)頁設(shè)計,也只需要傳輸創(chuàng)作后的頁面文件,而不必將所有的圖像源文件和頁面文件都傳輸.
            因為SVG能夠很好的與HTMLXML兼容,所以,下一代的網(wǎng)頁編輯軟件將開始結(jié)合圖像創(chuàng)作功能.許多現(xiàn)在需要通過外部圖像或動畫軟件創(chuàng)作的效果,將可以直接在網(wǎng)頁編輯軟件中完成
          .
            結(jié)合SVG創(chuàng)作網(wǎng)頁,將使網(wǎng)頁設(shè)計師真正可以""出頁面
          .

             另外,有一些專業(yè)的計算機軟件公司開發(fā)基于web的圖形化軟件,看到了svg的優(yōu)勢和前景。但是苦于沒有一個好的創(chuàng)作工具而放棄。這是一個大的市場,筆者一直想開發(fā)一個用于軟件公司的產(chǎn)品。

             這個工具一旦誕生,將是世界首家。市場非常廣闊。

          總體目標(biāo)

          產(chǎn)品目標(biāo)定義

          產(chǎn)品的目標(biāo)除了吸收目前市場上產(chǎn)品的優(yōu)點

          可以用簡單的圖元進行靜態(tài)svg的設(shè)計創(chuàng)建,同步源碼和展現(xiàn)預(yù)覽以外

          增加新的目標(biāo)是。

          1,  java開發(fā),跨平臺

          2,  工具可以和數(shù)據(jù)庫交互

          3,  可以定義事件

          4,  增加組件庫

          5,  提供api供其它java軟件項目調(diào)用

          市場目標(biāo)定位

          第一步:面向?qū)I(yè)的計算機公司

          第二步:面向廣告公司及更大的客戶群

          產(chǎn)品范圍

          組件設(shè)計工具

          可以通過簡單的圖元和已有組件進行新的組件設(shè)計,但不涉及事件定義,只是簡單的靜態(tài)圖形文件的創(chuàng)建。

          總體設(shè)計工具

          可以通過簡單的圖元和已有組件進行總體圖形的設(shè)計。可以進行事件腳本設(shè)計,可以和后臺數(shù)據(jù)庫關(guān)聯(lián)。圖形屬性更加豐富。

          java解析展現(xiàn)工具

          可以在java appJpanel上解析展現(xiàn)svg文件。

          posted @ 2005-10-04 17:27 鋒出磨礪 閱讀(1799) | 評論 (2)編輯 收藏

          喝下苦酒
          品味美茗
          靜聽繞梁
          細(xì)彈綠綺
          人生美不過如此

          進入責(zé)任的年代
          紛亂的時候
          不知前途
          忙活著找個苦力干
          目標(biāo)框進狹小的目光里

          心不甘
          別人都忙著跳龍門
          當(dāng)然也想
          拼了 實現(xiàn)了
          卻有跳入另一個桎梏

          親情 戀情
          怦然心動已過
          心不死
          結(jié)婚生子
          離離合合

          在圈內(nèi)的桎梏里掙扎
          為了好的生活
          思想不是自己的思想
          個性更沒有自己的個性

          到處都有責(zé)任的年齡
          忍辱負(fù)重

          posted @ 2005-10-02 18:15 鋒出磨礪 閱讀(304) | 評論 (1)編輯 收藏

          生命之舟起航了
          喝母乳的時候
          開始涂抹自己人生的畫卷

          碎碎幼童
          橫不橫 豎不豎
          力道不夠 心胸卻大
          聽不懂繞梁音
          記的住綠綺弦

          長到冠禮
          富貧異 教不同
          體格各異 千篇思想
          任創(chuàng)造發(fā)揮
          奠日后根本

          太陽青年
          論不論 師不道
          應(yīng)試教育 各方壓力
          重壓下題海
          輕松里頹廢

          象牙塔
          玩就玩 學(xué)就學(xué)
          考試過關(guān) 天下太平
          無頂梁本事
          卻大言不慚

          社會熔爐
          常奈何 心郁悶
          談婚論家 養(yǎng)家糊口
          苦苦掙扎中
          努力拼爭里

          到中年
          上有老 下有小
          教育孩子 重蹈覆轍
          奈何在那里
          夢婆也不知

          朽木朽木
          貧與賤 樂與悲
          一捧黃土 半尺方堂
          一輩子過了
          下輩子重來

          posted @ 2005-10-02 18:05 鋒出磨礪 閱讀(258) | 評論 (1)編輯 收藏

          僅列出標(biāo)題
          共14頁: First 上一頁 6 7 8 9 10 11 12 13 14 下一頁 
          主站蜘蛛池模板: 封开县| 福建省| 新津县| 胶州市| 蛟河市| 哈尔滨市| 乌审旗| 温泉县| 绍兴市| 林甸县| 长葛市| 墨脱县| 金秀| 红河县| 共和县| 新巴尔虎右旗| 清涧县| 宝鸡市| 江达县| 灵山县| 莲花县| 凤城市| 和平区| 阿鲁科尔沁旗| 延津县| 呼和浩特市| 乌拉特前旗| 稷山县| 新乡市| 昌吉市| 蓬莱市| 江安县| 扎兰屯市| 河南省| 伊吾县| 蛟河市| 哈尔滨市| 咸宁市| 荔浦县| 思南县| 武胜县|