C50108
Search…
職訓局里程碑
2019/0429/物件導向技術原理方法實作

MVC大架構講完
接著物件導向技術原理方法實作

對於初學者來說不好懂有點抽象
不是底層現在程式設計幾乎都是物件導向
抽象化資料data abstraction 只有相對概念,多抽象多不抽象
物件(程式語言)導向(用這種習慣)
相對於
程序性導向
Int a ;
A=3 ;
If(a>0)
{print(a)}
缺點不易讀寫到哪就到哪不好維護不好學
會員資料管理(包含新增修改刪除列印)都在一隻程式內
藉由
模組化結構化成物件導向
分成新增修改刪除列印(分清楚)(likeusecase)
功能需求結構化 = usecase
功能拆開但彼此又是同一個大模組內
Usecase精隨就是 提前架構好
新增很抽象的話
就要增加它底層的usecase
新增包含 填入資料 驗證 送出資料 (相較於只講新增具體就是新增的抽象化
老師覺得知道頂或底會覺得怪所以才先教我們從矛點架構
企管跟公管對於系統架構較容易成為系統分析師
題外話:
李家同 - Google Search
Google
微分 -> 應用經濟學 那 積分 ?
排列組合機率
回正題:
物件導向其實就是一種結構化的升級
物件概念(以現實生活中的東西去寫成程式)
Ex 文具<-筆 ( 白板筆 鉛筆 原子筆 鋼筆 )
頂:往上為抽象化一般化
底:往下為實現化具體化(弄得更趨近於現實
文具 ( 筆 噴槍 立可白 橡皮差 尺 圓規 ) XXXX
文具 ( 繪圖工具 修正工具 測量工具 ) OOOO
歸類(抽象化一般化往上)不一定有幾層看你要多細
物件導向 – 類別 ( 把物件歸類各種類別 )

剔除差異只找共同特徵
物件 ( 類別的具體化 ) 實現(往下)出來就是物件
成員member
屬性 物件有什麼
方法 物件會什麼
解釋完物件與類別來實作一下
新增保護資料夾 ( 客戶端沒辦法跟伺服器要求看這個檔案
Random r = new Randow();
TextBox tb = new TextBox()
TextBox tb2 = new TextBox()
TextBox tb3 = new TextBox()
類別 物件 = 新的 建構子
TextBox名字不一樣但有一樣的特徵
現階段有相同的方法相同的屬性(接下去可能會不一樣)

App_code加入新類別
C#裡面檔名叫什麼類別就會叫什麼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace back_end.App_Code
// 命名空間 專案名稱
// 別的專案要使用就要using過去 別的專案也可以一個類別同樣名稱(因為命名空間不一樣)
{
public class Person
// 修飾詞 類別 類別名稱
{//field 特徵欄位(屬性)
}
}

屬性視窗 建置動作 內容改為編譯
建置編譯過後就可以using Person近來鑄造物件
Namespace必須要注意路徑不然引用不進來

物件後面打點因該要有屬性方法事件成員
人資會先塞選條件 然後才會pass到部門
當50都通過它也不會全pass過去
送25壓25人在手上
所以很大關係是靠緣分
620會有廠商來招募 可以投不是相同職類相關的
可以定義屬性內容(需要符合定義型態
以上為物件實作
類別 ( 設計圖概念
物件 ( 設計圖做出來的東西
Tb.id=”TextBox1”;
Tb.text=”abcde;
板手形狀icon都是屬性 ( 上面的person還沒定義成屬性所以都是欄位 field )

類別實作項目就叫封裝(資訊隱藏)
閃電形狀事件
正方形紫色為方法
類別裡面定義的東西在使用類別的時候是看不到的
不必知道怎麼被實做出來的
為何需要封裝?

修飾詞 有三種等級
Public 公開 任何人都可存取
Protected 保護 除了同類別 繼承類別的成員也可以存取
Private 私有 (C#沒有加修飾詞預設 ( 只有同一類別的其他成員可以存取

欄位為何不可以直接存取?
避免不合理的輸入 如 年齡 age int = -18 ( 年齡不可能為負數

屬性不成文的寫法第一個字要大寫
Public string Name
{
Get{name = “第一名” return name;}; //取值
set; //給值
}

必須去看系統文件,只要知道怎用不用知道過程,
只要知道結果,不須知道為什麼。

因為封裝的時候沒有set
可以很複雜的封裝
控制項其實都是物件,怎麼用就要看文件,沒有留文件封裝後就只剩封裝的人知道怎麼用。

就像bootstrap inclued進來還可以改核心
但也有問題
所以才會有後續 多型多載等等 …
接著

修飾詞 return
回去的資料型態
方法名稱(方法參數資料型態 方法參數名稱) {方法內容}
Public string Speak(string content){return name+”講了”+content;}
Response.write(speak);
方法分為(不傳參數與傳參數)
/// 教人如何使用你建構的物件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ASPnet.App_Code;
namespace ASPnet
{
public partial class _37OO_Person : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Random r = new Random();
TextBox tb = new TextBox();
//TextBox tb2 = new TextBox();
//TextBox tb3 = new TextBox();
//TextBox tb4 = new TextBox();
//TextBox tb5 = new TextBox();
Person Mary = new Person();
//Response.Write(Mary.Name);
Response.Write(Mary.Jump());
Person Jason = new Person();
Jason.Name = "Jason Lee";
Jason.Age = -18;
string speak= Jason.Speak("我是一個大帥哥!!");
Response.Write(speak);
////Jason.gender = true;
////Jason.height = 172;
//Jason.weight = 68.5M;
////Jason.name = "Jason Lee";
}
}
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ASPnet.App_Code
{
public class Person
{
//field
string name= "第一名";
int age;
bool gender;
decimal height;
decimal weight;
//Attibute(屬性)
public string Name
{
get
{
if(string.IsNullOrEmpty(name))
name = "第一名";
return name;
}
set
{
if(!string.IsNullOrEmpty(value))
name = value;
}
}
public int Age
{
get
{
return age;
}
set
{
if (value < 0)
age = 0;
else
age = value;
}
}
public decimal Height
{
get
{
return height;
}
set
{
if (value < 0)
height = 5;
else
height = value;
}
}
public decimal Weight
{
get
{
return weight;
}
set
{
if (value < 0)
weight = 1;
else
weight = value;
}
}
public bool Gender
{
get { return gender; }
set { gender = value; }
}
//方法
//說話(Speak())方法
/// <summary>
/// 請傳入要說的話
/// </summary>
/// <param name="content"></param>
/// <returns></returns>
public string Speak(string content)
{
return name + "講了「" + content + "」";
}
public string Jump()
{
return name + "嚇了一跳!!";
}
}
}

參數數量不同或是資料型態不同,都可以做多載

共同屬性共同方法
排除相異的屬性
先不管值
不應該實作那麼多相同屬性的類別
應該拉出一個父類別讓另外幾個子類別繼承相同屬性
建置動作改成編譯
冒號就是:繼承
有了繼承鑄造出來的類別就有了更多的實用性
甚至可以往上下 狗跟人 都是動物
繼承跟鏈結有點像 只要繼承一個 就會繼承所有父類別特性(屬性與方法)
人貓狗牛 speak 的內容到底要 return什麼呢?
人是幹 貓是喵 狗是汪 牛是牟
只好使用以下

實務上其實是系統分析師要把這個規格圖畫好
程式設計師直接寫完就好

通常只做方法名稱不做內容 又稱為抽象方法
但也可以做一般方法(裡面有商業邏輯的)
就不用寫 abstract 但要return 數值
抽象類別多型後在子類別內屬性會出現綠色蚯蚓符號,但多載的就不會出現。
這時就要再 前面加上前置詞 override
子類別內實作自己的方法並且覆蓋掉父類別
根本不會去實作那個抽象方法 因為它做出來沒有用 它就是要被覆蓋的
多型 = 動態多載
靜態 = 靜態多載 寫死在那個類別裡面
子輩
孫子輩

後端39舉例
抽象類別不用 new 沒有建構子概念 直接宣告就好
最後那串為同名異式多型 上面判斷完後 就會將子類別傳入 anima抽象類別並覆蓋掉l 抽象類別的屬性然後 才去呼叫 父類別方法speak()
此後置程式碼 只有類別鑄造的物件 沒有變數
那如果 動物裡面的 蜜蜂 魚不會叫speak() 還要繼承動物嗎?
除了抽象類別以外
還有個方式

對於魚這個類別來說是沒有speak()這個方法
難道要把人拆100種嗎?
且對於狗來說要怎實作雙繼承呢?
且類別無法多重繼承
但介面interface可以多重繼承
也可以全部做介面而不做抽象類別
子類別無法通用父類別 所以才要有 interface
通常介面檔名前面會寫一個 I 才接介面名稱 IAnimalSpeak / IAnimalSpeak
介面是一個非常彈性的技巧

介面不需要 override 覆蓋 只有抽象類別需要
可以多重繼承
可以實作多型
39 改為混和抽象多型&介面多型

Flag 旗標?? True 執行 a falus 執行b

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="39OO_Polymorphism.aspx.cs" Inherits="ASPnet._39OO_Polymorphism" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:RadioButtonList ID="RadioButtonList1" runat="server">
<asp:ListItem Text="人"></asp:ListItem>
<asp:ListItem Text="狗"></asp:ListItem>
<asp:ListItem Text="貓"></asp:ListItem>
<asp:ListItem Text="魚"></asp:ListItem>
</asp:RadioButtonList>
<asp:Button ID="Button1" runat="server" Text="按我就叫(類別)" OnClick="Button1_Click" />
<hr />
<asp:Label ID="Label1" runat="server"></asp:Label>
</div>
</form>
</body>
</html>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ASPnet.App_Code;
namespace ASPnet
{
public partial class _39OO_Polymorphism : System.Web.UI.Page
{
Animal animal;
IAnimalMove imove;
IAnimalSpeak ispeak;
Dog dog = new Dog();
Cat cat = new Cat();
Person person = new Person();
Fish fish = new Fish();
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
int flag = 1;
if (RadioButtonList1.Items[0].Selected)
animal = person;
else if (RadioButtonList1.Items[2].Selected)
animal = cat;
if (RadioButtonList1.Items[1].Selected)
{
imove = dog;
ispeak = dog;
flag = 2;
}
else if (RadioButtonList1.Items[3].Selected)
{
imove = fish;
flag = 3;
}
if (flag==1)
{
Label1.Text = animal.Speak();
Label1.Text += animal.Move(5);
}
else if (flag == 2)
{
Label1.Text = ispeak.Speak();
Label1.Text += imove.Move(8);
}
else if (flag == 3)
{
Label1.Text = imove.Move(8);
}
}
}
}

食譜食材為類別
主菜的方法為建構子
煮完的東西為物件
方法一定要依附物件 (一定要有類別來定義方法 )
函式可以單獨存在
物件導向就不會單獨存在肯定寫在class裡面
每一頁asp
其實都是一個獨立的類別Class
不能用數字當開頭
所以會多了 _ 且繼承 page類別
建構子的概念就是 鑄造類別的時候
Person Josh = new Person()

實作建構子鑄造物件
套用到 asp.net 建構子 類別 與 物件
接著大概就是部屬了 如何部屬到iis或阿帕契上
Copy link
On this page
#物件導向技術原理方法實作
##原理
###實作類別就是實作物件抽象化一般化分類
##實作定義自己的類別
##類別鑄造物件
##封裝
##修飾詞
##實作方法
##(方法的)多載 同一個類別裡面有很多相同名稱的方法
##繼承 子會繼承父結點特性
##同名異式 = 多型
##介面interface
##建構子 建構函數(函式)