3A課程筆記分享_StudyJams_2017

来源:http://www.cnblogs.com/DerekKen/archive/2017/05/28/6917043.html
-Advertisement-
Play Games

課程3A的內容主要是介紹面向對象編程思想的一些基本概念並做了相應的練習指導。 面向對象的思想在當今的軟體開發中占據著主導地位。 Java是一門完全面向對象的語言,是一種天然的分散式互聯網軟體的開發語言,在當今企業級應用中占據絕對領先地位,也是開源世界的頂梁柱。 ...


課程3A-面向對象編程(上)

概述

  • 面向對象的思想在當今的軟體開發中占據著主導地位。
  • Java是一門完全面向對象的語言,是一種天然的分散式互聯網軟體的開發語言,在當今企業級應用中占據絕對領先地位,也是開源世界的頂梁柱。
  • 課程3A的內容主要是介紹面向對象編程思想的一些基本概念。

Warm-Up:準備活動

  • 練習定義方法,調用方法。這個練習首先修改了MainActivity.java中的display()方法的名字,然後修複代碼中的語法錯誤:修改之前所有對於display()方法的調用為當前的方法名。這個練習的目的主要是想讓學生熟悉方法定義和調用的過程以及這兩者之間的一一對應的關係。

  • 在 Android Studio 中打開方法聲明的鍵盤快捷鍵為:Mac:command+b,Windows:control + b。

  • 定義一個方法的需要哪些部分?

a) Access Modifier(Accessibility Specifier),訪問控制修飾符。經常使用的是"private"與"public",當使用前者時,表明此方法是私有方法,只能在當前類的上下文(在這裡,即為MainActivity)中被調用;當使用後者時,表明當前方法具有全局的可訪問性,即在代碼中的任何位置都可以調用。

b) Return Data Type,返回值類型。這部分指定當前方法的返回值類型。

c) Method Name,方法名稱。與我們之前使用變數名來引用一個變數類似,我們也可以使用方法名(和傳入參數)來調用定義好的方法。

d) Matched Parentheses,匹配的圓括弧。匹配的圓括弧中的是實參列表(聲明或定義方法時)與形參列表(調用方法時),調用方法時,必須要有匹配的圓括弧,否則編譯時會提示語法錯誤。

e) Parameter List,參數列表,以逗號分隔,實參列表中的變數名可以在整個當前函數的範圍內使用,出了該範圍,這些變數都不可以再被引用。形參列表中的傳入參數需要具有相同或者是相容的類型(以便編譯器能夠自動進行隱式類型轉換),變數名不必與對應的實參變數相同。

f) Matched Curly Braces,匹配的花括弧,表示當前函數的範圍。

g) Method Signature,方法簽名。方法簽名由方法名、參數列表構成。Method Signature與方法重載的概念緊密相關:只有具有不同方法簽名的方法能夠同時存在於一個上下文中,僅僅只是返回值類型不同的方法不能夠重載。

  • 使用方法的流程: 確定方法簽名以及返回值類型,作為方法的聲明 ----> 在成對的花括弧代表的語句塊中實現當前方法的邏輯 ----> 在需要的地方調用方法 ----> 如果需要利用被調方法的返回值,則對該返回值進行處理。

  • 進行了以上練習後,JustJava程式在手機上運行的效果如圖1所示。

Fig1. JustJava:生成訂單信息小結

圖1. JustJava:生成訂單信息小結



Android項目的資源文件

  • 資源文件包括圖片、音頻、XML文件(佈局和項目配置)、字元串文件等等。

  • 使用資源文件可以將程式的邏輯與程式具體展現形式分離開來。比如想要做APP的國際化時,就可以在各個語言各自的字元串文件之間切換, 非常方便;想要適應高清屏幕時,只需載入同一資源(圖像、視頻)的更高清版本。

  • 另一方面,Java代碼負責程式邏輯的實現,與資源文件之間是松耦合的關係,提升了代碼及資源文件的復用性。如果把資源都硬編碼在代碼中,整個項目會顯得比較混亂,不利於縮短開發周期,也不利於項目的維護和迭代。

  • 在使用Java來開發Android項目時,會生成一個R.java文件,其中對res資源文件中的資源進行了編號,方便在Java代碼中訪問這些資源。對於string字元串類型的資源,訪問的語法為R.string.* (“*”即為對應的資源文件名);對於layout佈局類型的資源,訪問的語法為R.layout.*。

  • 在Java文件與xml文件中都可以訪問資源文件,具體方式如圖2所示。

    Fig2. 訪問資源文件

    圖2. 訪問Android項目資源文件



對象、類、繼承

  • 當在onCreate()方法中調用setContentView()方法時,
setContentView(R.layout.activity_main);

我們通過R這個對當前所有的項目資源的抽象的類來訪問佈局資源activity_main.xml,Android程式執行到這一語句時會解析此xml文件,分析各個Views之間的層級關係並據此生成對應的Java對象。

  • Java對象:可以擁有成員(變數或方法),其整體是對State的封裝,外界(凡是無法直接訪問此對象內部的,對於該對象而言都可稱為“外界”)可以使用此對象提供的一些方法(比如說,setter方法與getter方法)來修改其成員變數,從而改變此對象的狀態。外界可能根據對象狀態的改變進而採取不同的操作,實現期望的邏輯。

  • Java類
  1. member variable == field == state,成員變數、域、狀態等術語在當前語境(Java Class)下的含義相同。
  2. 成員變數的命名規範(naming conventions):成員變數的名字以"m"或者"m_"作為首碼。
  3. 與之前說過的定義變數類似,定義一個Java Class時,也需要指定(不指定的話,我記得訪問控制預設是protected級別的)當前類的訪問控制修飾符(Acess Modifier)。
  4. Constructor,構造函數。構造函數是為了實例化(instantiate)Java類為一個實際存在於記憶體中的對象,構造函數與普通函數類似,也有參數列表;定義構造函數與定義普通函數的過程類似,但不需要指定返回值類型,其語法格式為“類名 + 參數列表 + 實現類實例化的代碼塊”。
  5. 如果一個類的定義中沒有顯式地指定任何構造函數,那麼實例化該類時對調用預設構造函數。 需要註意區別無參構造函數預設(default,預設的)構造函數:當一個類的定義中顯式地定義了一個不接受任何參數的構造函數時,那麼在不傳入參數地實例化這個類時,調用的就是無參構造函數,而不是預設(預設)構造函數。
  6. Factory Method,工廠方法。除了使用構造函數來創建對象,我們也可以使用工廠方法。更詳細地來講,工廠方法是一種對象創建型的設計模式,其意圖在於定義一個用於創建對象的介面,讓子類決定實例化哪一個類;效果就是一個類的實例化被延遲到其子類。

      6.1 Factory Method的適用範圍: 當一個類不知道它所必須創建的對象的類的時候;當一個類希望由它的子類來指定它所創建的對象的時候;當類將創建對象的職責委托給多個Helper子類中的某一個,且你希望將哪一個Helper子類是代理者這一信息局部化的時候。 如下的代碼即應用Factory Method把Toast類的實例化延遲了:等待有具體文本信息的時候再實例化出Toast對象。
Toast toast = Toast.makeText(context, text, duration);


  1. 註意,在一個class內部與外調用方法的區別: a)class之外無法訪問private方法;b)語法上的區別。類中調用方法可以不指定當前對象(this),而在類外調用則必須指定。如圖3所示。

    Fig3. 在類的內部與外部調用類方法的區別

    圖3. 在類的內部與外部調用類方法的區別



  2. Object Method,對象方法。 通過調用對象方法(object method)在Java代碼中改變Views的屬性,使得我們可以運行時根據用戶的交互,動態地改變Views的外觀。這對於互動式的APP來說十分重要。

  3. Inheritance,繼承。當一個類A繼承另一個類B時,預設地,A就會擁有B的所有public方法與成員(無法繼承private的方法與成員變數)。子類可以復用繼承而來的方法、變數,也可以重寫(override)父類的方法。 通過繼承,可以實現多態性,使得程式設計更加靈活、強大。繼承是OOP(Object Oriented Programming,面向對象編程)中非常重要的一環;用類圖可以展現整個軟體系統的繼承層次關係,現代軟體項目的設計基本上沒有脫離了類圖的。

  4. Casting,轉型。 方法findViewById()返回的對象類型是View;但如果傳入的id是一個View的子類的id,為了正確使用該方法的返回值,我們需要進行轉型,將findViewById()的返回值轉型成為該id對應的實際的對象類型(可以通過查看xml源文件來得到該信息)。關於Java中轉型的更多知識,可以參考 ORACLE官方文檔_Inheritance (請參閱“Casting Objects”部分)。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.兩個元素換行書寫時,在實際的佈局中展示為兩個元素之間多了一個區間(這個區間通常是因為代碼在換行時,解析會自動預設為一個空格字元),所以在實際應用時,如果想要將兩個元素完全無縫隙的放置在一起併排顯示時,應該註意使用浮動和定位,或者可以通過設置父級元素的font-size:0;的方法; 2.使用絕對 ...
  • 前面的話 Douglas Crockford大神根據自己的理念用JavaScript寫了一個JavaScript代碼規範檢查工具,這就是JSLint。後來非常流行,也的確幫助了廣大的JavaScript程式員。但是,大神對於自己的代碼規範不做絲毫的妥協,對開源社區的反饋的回應也不禮貌。於是,JSLi ...
  • CSS中可以通過設置為元素設置一個position屬性值,從而達到將不同的元素顯示在不同的位置,或者固定顯示在某一個位置,或者顯示在某一層頁面之上。 position的值可以設為relative,absolute,fixed,static。 HTML代碼里定義兩個區塊: 1.相對定位: 以上代碼將實 ...
  • 一、React的發展 facebook在構建instagram網站的時候遇見兩個問題: 1、數據綁定的時候,大量操作真實dom,性能成本太高 2、網站的數據流向太混亂,不好控制 於是facebook起初調研過市場上已存的mvc框架,發現都不太滿意,於是就推陳出新,開發了react框架,併在2013年 ...
  • 0. 掌握基礎 對於任何行業任何工作來說,融會貫通是獲得成功的關鍵。一個人想要成為優秀程式員,就必須有堅實的基礎。核心理念的理解會幫助你用最好的方法設計和實施出最完美的方案。如果你感覺到不能掌握核心的電腦科學或者某個編程語言的知識點,現在開始回顧基礎一點都不晚。 1. 開始為你寫過的代碼貼上標簽( ...
  • let實際上為 JavaScript 新增了塊級作用域。 塊級作用域的出現,實際上使得獲得廣泛應用的立即執行函數表達式(IIFE)不再必要了。 本質上,塊級作用域是一個語句,將多個操作封裝在一起,沒有返回值。 ...
  • 最近閑來沒事,做了一個畫江湖圖片滾動載入的demo,大家感興趣可以下來看一下 以下為界面截圖: 圖片會隨滾動條的拖動動態載入,目前來說只是載入的本地的資源,大家可以從後臺抓取數據來實現懶載入. 支持圖片點擊然後大圖來查看: 代碼已經放到git上了,歡迎下載試用 https://github.com/ ...
  • 摘自阮一峰的es6教程 http://es6.ruanyifeng.com/#docs/let ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...