iT邦幫忙

2022 iThome 鐵人賽

DAY 3
0
Mobile Development

AOSP(Android Open Soure Project)學習系列 第 3

Android App跟HAL Layer使用語言 學習中 (10/2更新)

  • 分享至 

  • xImage
  •  
  • 學習物件導向
    • 除了學習每個語言基本語法和繼承多型之類的寫法之外

    • 還需要學好Design Pattern,Design Pattern是所有語言都可以共通的概念,只是完成他的寫法不同

    • Design Pattern (不只這10種)

      • singleton
        一次只能存在唯一instance的物件(object)
        使用範例:Settings

      • prototype
        複製(clone)的高端用語
        建立(create)時是"複製"物件而不是去"extending"物件

      • builder
        用方法(method)去建立物件而不是用建構子(constructor)去建立
        真實例子:JQuery

      • factory
        不直接建立變數去instantiate物件,而是用function或method去建立物件
        使用範例:cross platfrom app - 用條件式去決定哪種button要顯示給用戶

      • facade
        一種簡易的API,用來隱藏代碼庫(code base)的low level detail
        使用範例:建立一個class,這個class包含了low level system操作,讓別的程式去依賴這個class,減輕程式操作難度(和撰寫難度)
        真實例子:JQuery

      • proxy
        替代(substitue)的高端用語
        用"代理人(物?)"去把目標物件置換掉
        真實例子:Vue's reactivity system

      • iterator
        遍歷物件s的集合,迴圈 (有熟悉的東西!)

      • Observer
        Many objects subscribe to events that are broadcast from another object.
        一對多的關係
        在時間的維度上進行的loop行為(有人固定跑來問你進度完成的怎樣?(天阿))

      • Mediator
        就是個中間人或經紀人
        真實例子:1. 飛機起飛降落的塔台控制() 2. Middleware

      • State
        切換不同的(有限個)狀態下,物件的行為會不同
        真實例子:有限狀態機
        Jonathan Hoffman's comment

    • 為了能夠更好的跟其他開發者溝通,要好好學UML,把想表達的架構直接圖解

    • 為了寫好物件導向,必須更了解手上使用語言的特性

10 Design Patterns Explained in 10 Minutes
[軟體推薦] 開源圖表繪製軟體

 
 

  • Learn Java
    • .java被compiler編譯成.class裡面裝著java bytecode,然後被JVM(Java Virtual Machine)轉成machine code
    • java變數型態 boolean byte,其他跟C++類似,共8種
    • 變數處理就分declaration, assignment, intialization
    • mac可以安裝eclipse,本想嘗試使用VS code來練習Java,但看到2019年的
      對VS code調教開發JAVA環境的評價,還是先乖乖用eclipse

Java Full Course for Beginners ☕ by Bro Code
Day 27: 使用 VS Code 來開發 Java

 
 

  • C++

    • 變數處理分成declaration, defnition, assignment, initialization
    • 寫完c++檔案後,需要compiler把source code compile成object file,然後再由linker去link這些object file
      • link會去連結func跟func之間的呼叫
      • link 有分static linking和dynamic linking
    • 一個.cpp檔會被compiler生成一個對應的.obj檔(.h檔、lib之類的內容會被compiler複製進define他的.cpp檔),這也是為何.ojb檔會比.cpp檔尺寸大
    • c++被build的時候會做compile接著做link
      • build error會分compile階段的error跟link階段會出現的error
      • 在實際開發專案時,常常可能因為建置環境不同(即使是換了一台電腦,OS版本,code版本不同),會出現build不過的情形這時,不同地區的開發者要共同開發,就必須先處理build問題,可以build才能接力進行開發除錯的工作
    • 語法
      • static int Multiply() //讓func只能被位在同一檔案的其他func呼叫,有些linking error可以暫時被這個解決
    • IDE
      • 決定定居visual studio code on macOS

      • follow official doc to setup environment here

      • Compiler

        • Clang
          • Compiler前端
          • C, C++, Objective-C, Objective-C++都可以用它
          • 用LLVM作為後端
          • 會將我寫好的程式碼編譯成LLVM bitcode(鬼知道這是什麼東西)
          • 用他的好處是?據說其生成的AST所耗用掉的記憶體僅僅是GCC的20%左右
          • 我的clang版本
          $> clang --version
          Apple clang version 13.0.0 (clang-1300.0.29.3)
          Target: x86_64-apple-darwin20.6.0
          Thread model: posix
          InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
          
        • Some platforms, such as Linux or macOS, have a C++ compiler already installed. Most Linux distributions have the GNU Compiler Collection (GCC) installed and macOS users can get the Clang tools with Xcode.

        Visual Studio Code on macOS
        Using Clang in Visual Studio Code # 仔細看
        Day 07: 這就是我喜歡的小地方:IntelliSense
        C/C++ for Visual Studio Code

    C++ tutorial by The Cherno

  • String in C++

    • string是collection of character
    • 在C++裡面'跟"有區別,"預設是用char*存的,'預設是存char的
    • 要正常的印出string,要在char array後面加一個0 or '\0'
    • 在 library裡,string型別
      • 被雙引號"夾著的字串本身是const char,而非char*
      • "ccc" + "hhh"在C++是不允許的,因為他是const
      • 只能string型別物件 + "jjj"
    • 不要用char name[] = "soho"
      • 因為這個name可以被replace(?

    (4) How Strings Work in C++ (and how to use them) - YouTube

bug

it's because cpp standard?

Problem: The preLaunchTask 'C/C++: clang++ build active file' terminated with exit code -1.
expected ';' at end of declaration
range-based for loop is a C++11 extension [-Wc++11-extensions]

Sol:
在task.json的"args"加入指定大於11的c++standard

"args": [
                "-g",                
                "main.cpp",
                "-o",
                "test"
            ],
"args": [
                "-g",                
                "-std=c++14",
                "main.cpp",
                "-o",
                "test"
            ],

or

"args": [
                "-g",                
                "-std=c++17",
                "main.cpp",
                "-o",
                "test"
            ],

10/2 更新:c++ string


上一篇
工作跟Android有關時,可以先接觸的相關名詞
下一篇
Java學習中 2
系列文
AOSP(Android Open Soure Project)學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言