一.类和对象的概念
1.1类
自己的定义: 具有相同或相似性质对象的抽象。
1.2 对象
自己的定义: 对象是人们要进行研究的任何物体,从最简单的整数到复杂的飞机
等均可以看做是对象。
举例说明:
类 :车 ;对象:奔驰,宝马,劳斯莱斯
类 :人 ;对象:小明,小红,李平
对象一般都具有属性:一个对象用数据值来描述他的状态:
一个叫xiaoming的对象,具有年龄和姓名的属性
age = 10
name = “xiaoming”

对象还有操作:对象的操作用来改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合:使数据和操作封装于对象的统一体中。

作者:
平平安安2

链接:http://www.imooc.com/article/15254
来源:慕课网

一.类和对象的概念
1.1类
自己的定义: 具有相同或相似性质对象的抽象。
1.2 对象
自己的定义: 对象是人们要进行研究的任何物体,从最简单的整数到复杂的飞机
等均可以看做是对象。
举例说明:
类 :车 ;对象:奔驰,宝马,劳斯莱斯
类 :人 ;对象:小明,小红,李平
对象一般都具有属性:一个对象用数据值来描述他的状态:
一个叫xiaoming的对象,具有年龄和姓名的属性
age = 10
name = “xiaoming”

对象还有操作:对象的操作用来改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合:使数据和操作封装于对象的统一体中。
二.面向对象
2.1自己的定义:面向对象是把问题里拥有相同属性的东西建立一个类,类有属性和方法,然后创建类的一个对象,调用类的属性,方法来解决问题。有三个明显的特点 :封装,继承,多态
1.封装性
指利用类将数据和基于数据的操作封装在一起,数据被保护在类的内部,系统的其他部分只有通过被授权的操作,才能与这个类进行交流和交互。
好处:将变化隔离,便于使用,提高重用性,提高安全性
封装原则:将不需要对外提供的内容隐藏起来;把属性都隐藏,提供公共方式对外访问
2.继承性
一个类可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了新的功能。
3.多态
指一个程序中可以有同名的不同方法共存的情况,可以利用子类对父类;方法的覆盖和重载在同一个类中定义多个同名的方法来实现。
2.3 面向对象的优点
1、易维护:采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求, 那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高:在设计时,可重用现有的,在以前的项目的领域中已被测试过的类,使系统满足业务需求并具有较高的质量。
3、效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

作者:
平平安安2

链接:http://www.imooc.com/article/15254
来源:慕课网

一、类和对象的概念

1.1类
  自己的定义: 具有相同或相似性质对象的抽象。
   1.2 对象
   自己的定义: 对象是人们要进行研究的任何物体,从最简单的整数到复杂的飞机
                    等均可以看做是对象。
举例说明:
类 :车       ;对象:奔驰,宝马,劳斯莱斯
类 :人      ;对象:小明,小红,李平
对象一般都具有属性:一个对象用数据值来描述他的状态:
            一个叫xiaoming的对象,具有年龄和姓名的属性     
            age  = 10
            name = “xiaoming”
                        
对象还有操作:对象的操作用来改变对象的状态,对象及其操作就是对象的行为。                                        
对象实现了数据和操作的结合:使数据和操作封装于对象的统一体中。

二、面向对象

2.1自己的定义:面向对象是把问题里拥有相同属性的东西建立一个类,类有属性和方法,然后创建类的一个对象,调用类的属性,方法来解决问题。有三个明显的特点 :封装,继承,多态
**1.封装性**
指利用类将数据和基于数据的操作封装在一起,数据被保护在类的内部,系统的其他部分只有通过被授权的操作,才能与这个类进行交流和交互。
好处:将变化隔离,便于使用,提高重用性,提高安全性
封装原则:将不需要对外提供的内容隐藏起来;把属性都隐藏,提供公共方式对外访问
**2.继承性**
一个类可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了新的功能。
**3.多态**
指一个程序中可以有同名的不同方法共存的情况,可以利用子类对父类;方法的覆盖和重载在同一个类中定义多个同名的方法来实现。
2.3 面向对象的优点
1、易维护:采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求, 那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高:在设计时,可重用现有的,在以前的项目的领域中已被测试过的类,使系统满足业务需求并具有较高的质量。
3、效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。

三、创建OC工程(本人电脑版本10.12 ;Xcode 版本 8.1)

好了,到这里第一个工程文件就创建完成了。
2、接下来我们就写一个类和对象的代码
创建类: 分为两个部分
1)类的声明部分
2)类的实现部分

类的声明部分:
        @interface 类名 : NSObject
        
        @end

类的实现部分
        @implementation 类名

@end

以创建一个学生的类为例:

#import <Foundation/Foundation.h>

//创建学生类

@interface Student : NSObject
{
//字段、成员变量
//@public
char _name[20];
int _num;
int _age;
}
//方法的声明. 类里面的函数-----方法
/******************************
写一个无参数 , 无返回值的方法
C:
void 函数名(void); OC:
- (void)方法名;
******************************/
- (void)eat; //方法名: eat
- (void)sleep; //方法名: sleep
- (void)playGame;
- (void)writeCode; /******************************
写一个带有一个参数 , 无返回值的方法 C语言的函数:
void 函数名(参数类型 参数) OC:
- (void)方法名:(参数类型)参数;
******************************/
- (void)setName:(char *)name; //方法名: setName:
- (void)setNum:(int)num; // setNum:
- (void)setAge:(int)age; // setAge: /******************************
写一个没参数 , 有返回值的方法 OC:
- (返回值类型)方法名;
******************************/
- (char *)getName; //方法名: getName
- (int)getNum;
- (int)getAge; /******************************
写一个带有多个参数的方法 OC: //void
- (返回值类型)标签1:(参数类型)参数1 [标签2]:(参数类型)参数2 [标签3]:(参数类型)参数3....;
除了第一个标签,后面的标签可以省略不写【空标签】,标签的作用标识参数的含义。
******************************/
- (void)setName:(char *)name //方法名: setName:num:
num:(int)num;
//- (void)setName:(char *)name :(int)num; - (void)setName:(char *)name //方法名: setName:num:age:
num:(int)num
age:(int)age; //打印对象里面所有的信息
- (void)printAllInformation;
@end @implementation Student
//实现所有的方法
- (void)eat
{
//实现跟C语言的函数一样
NSLog(@"他很能吃!");
} - (void)sleep
{
NSLog(@"吃完了,可以睡觉!");
} - (void)playGame
{
NSLog(@"他会玩英雄联盟!");
} - (void)writeCode
{
NSLog(@"他能写OC代码!");
} - (void)setName:(char *)name
{
// _name = name;
//当传入的字符串的长度超过 19 , 不接受
if (strlen(name) > 19) {
return;
}
strcpy(_name, name);
}
- (char *)getName
{
//返回_name 数组的首地址
return _name;
} - (void)setNum:(int)num
{
if (num < 0 || num > 100) {
return;
}
_num = num;
} - (void)setAge:(int)age
{
if (age < 0 || age > 200) {
return;
}
_age = age;
} - (int)getNum
{
return _num;
}
- (int)getAge
{
return _age;
}
- (void)setName:(char *)name num:(int)num
{
strcpy(_name, name);
_num = num;
}
- (void)setName:(char *)name num:(int)num age:(int)age
{
strcpy(_name, name);
_num = num;
_age = age;
} - (void)printAllInformation
{
NSLog(@"name: %s, num: %d, age: %d", _name, _num, _age);
}
@end int main(int argc, const char * argv[])
{ @autoreleasepool {
//实例化对象 Student *stu1 = [Student alloc]; // stu1->_id = 10;
// NSLog(@"id: %d", stu1->_id); //[对象指针 方法]
//通过stu1给对象发送了 eat消息
//通过对象指针,给对象 发送消息
//对象执行这个 eat方法,相应消息
[stu1 eat]; [stu1 sleep]; [stu1 playGame]; [stu1 writeCode]; //调用带有一个参数的方法
[stu1 setName:"zhangsan"]; //OC自诩为最优雅的语言
NSLog(@"name: %s", [stu1 getName]); [stu1 setNum:1];
NSLog(@"num: %d", [stu1 getNum]); //创建一个新的对象 stu2
Student *stu2 = [Student alloc]; [stu2 setName:"lisi"];
[stu2 setAge:20];
[stu2 setNum:2]; NSLog(@"name: %s", [stu2 getName]);
NSLog(@"num : %d", [stu2 getNum]);
NSLog(@"age : %d", [stu2 getAge]); [stu2 setName:"wangwu" num:3];
NSLog(@"name: %s", [stu2 getName]);
NSLog(@"num : %d", [stu2 getNum]);
[stu2 printAllInformation]; //创建一个新的对象 stu3
Student *stu3 = [Student alloc];
[stu3 setName:"yangliu" num:10 age:23];
[stu3 printAllInformation]; }
return 0;
}

3. 类中实例变量的权限

3.1 类的封装性, 数据的保护

3.2 三种权限和默认的权限

成员变量有3种访问权限:
 直接访问权限           类里      类外
 @public    公共的      V        V
 @protected 受保护的    V(子类)   X    (默认)
 @private   私有的      V        X

4 方法        方法(函数,消息)(有实例方法和类方法)见上述代码

实例化方法也叫对象方法同时也叫减方法  - (void)方法名;

非实例化也叫类方法同时也叫加方法        + (void)方法名;

-方法/对象方法/实例化方法    调用方式 [对象指针  -方法]
 +方法/类方法/非实例化方法    调用方式 [类名     +方法]

5 初始化方法(构造方法)

1、一般语言中,在创建对象时,自动调用的方法
                2、OC中,凡是用init开头的成员方法都是构造方法

【注】构造方法一般用于对象的初始化。

初始化方法格式
                <1>无参的初始化方法
                - (id)init{
                        self = [super init];//要调用父类的初始化方法初始化父类的成员变量
                        if (self) {
                        _age = 24;//初始化子类自己的变量
                        }
                        return self;//返回当前对象地址
                }
                <2>带参数的初始化方法
                - (id)initWithAge:(int)newAge{
                        self = [super init];//要调用父类的初始化方法初始化父类的成员变量
    
                        if (self) {
                        _age = newAge;//初始化子类自己的变量
                        }
                        return self;//返回当前对象地址
                }

初始化方法/构造方法(id,super,self)
                id类型
                                id: 泛型对象指针,与C语言void *类似
                 super
                                super: 用于调用父类方法的关键字(实际上就是一个编译器符号)
                self
                                self: 指向当前对象的指针
                                类内的方法进行相互调用可以用self

最后:大家可以试着自己创建一个长方形的类,有长和宽两个对象。

#import <Foundation/Foundation.h>

@interface MyRect : NSObject
{
CGFloat _length;
CGFloat _width;
}
- (void)setLength:(CGFloat)length;
- (void)setWidth:(CGFloat)width;
-(CGFloat)getLength;
-(CGFloat)getWidth;
- (CGFloat)area;
- (CGFloat)permiter;
@end #import "MyRect.h" @implementation MyRect
- (void)setLength:(CGFloat)length
{
_length = length;
}
- (void)setWidth:(CGFloat)width
{
_width = width;
}
-(CGFloat)getLength
{
return _length;
}
-(CGFloat)getWidth
{
return _width;
}
- (CGFloat)area
{
return _length * _width;
}
- (CGFloat)permiter
{
return 2 * (_length + _width);
}
@end #import <Foundation/Foundation.h>
#import "MyRect.h" int main(int argc, const char * argv[])
{ @autoreleasepool { MyRect *rect1 = [MyRect alloc]; [rect1 setLength:6];
[rect1 setWidth:7]; NSLog(@"%f==%f",[rect1 getLength],[rect1 getWidth]);
NSLog(@"area: %f", [rect1 area]);
NSLog(@"permiter: %f", [rect1 permiter]); //实例化第二个长方形
MyRect *rect2 = [MyRect alloc];
[rect2 setLength:4.5];
[rect2 setWidth:2.3];
NSLog(@"area: %f", [rect2 area]);
NSLog(@"permiter: %f", [rect2 permiter]);
}
return 0;
}

OC第一节 —— 类和对象的更多相关文章

  1. OC学习5——类和对象

    1.OC是在C语言基础上进行扩展得到的一门面向对象的程序设计语言,它也提供了定义类.成员变量和方法的基本功能.类可以被认为是一种自定义的数据类型,使用它可以定义变量,所有使用类定义的变量都是指针类型的 ...

  2. JAVA入门第二季 第一章 类和对象

    面向对象编程 Object Oriented Programming OOP 第一.什么是类和对象 在具体说明类和对象之前,先说说别的. 眼睛在人类身体上最为有用的器官.如果一个没有了眼睛,这个人与世 ...

  3. Java面向对象 第1节 类和对象

    一.Java 对象和类 面向对象语言三大特性:封装.继承.多态: 对象:描述客观事物的一个实体: 类:类是封装对象的属性和方法的载体,反过来说具有相同属性和行为的一类实体被称为类:类行为:方法:属性: ...

  4. OC开发系列-类与对象

    面向对象 面向对象思想是一种解决问题的思想, 不在是面向过程的去思考问题怎样解决.面向对象解决问题时首先要考虑需要找几个对象能解决这个问题. 常见的概念: * Object Oriented 面向对象 ...

  5. 前端学PHP之面向对象系列第一篇——类和对象

    × 目录 [1]类 [2]成员属性[3]成员方法[4]对象[5]成员访问[6]this 前面的话 面向对象程序设计(OOP)是一种计算机编程架构.计算机程序由单个能够起到子程序作用的单元或对象组成,为 ...

  6. Java入门第二季第一章类和对象知识点

    Java 中的 static 使用之静态方法 1. 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员.如: 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问 ...

  7. 《Java入门第二季》第一章 类和对象

    什么是类和对象 如何定义 Java 中的类 如何使用 Java 中的对象 Java中的成员变量和局部变量1.成员变量:在类中定义,描述构成对象的组件. 2.局部变量:在类的方法中,用于临时保存数据. ...

  8. obj-c编程01:第一个类和对象的范例

    这是obj-c学习过程中的第一篇博文,接下来还会有未知的N篇内容(关键是不知道obj-c有多难搞啊!),而且在以后不断的学习中,还会不断的在以前写的博文中修改和添加新的内容.在遇到暂时无法解决的问题时 ...

  9. OC语言-01类和对象

    // cc 文件名.m -framework Foundation 编译链接 #import <Foundation/Foundation.h> //枚举性别 typedef enum{ ...

随机推荐

  1. soapUI测试webservice(参数为xml格式的处理方式)

    如果传递的是xml,要用<![CDATA[   ]]>将xml注释为字符串 示例 <?xml version="1.0" encoding="UTF-8 ...

  2. Spider爬虫清洗数据(re方法)

    import re s0 = 'BOY and GIRL' s1 = re.sub(r'BOY|GIRL', 'HUMAN', s0) print s1 # HUMAN and HUMAN 替换方法.

  3. POJ3281 Dining(拆点构图 + 最大流)

    题目链接 题意:有F种食物,D种饮料N头奶牛,只能吃某种食物和饮料(而且只能吃特定的一份) 一种食物被一头牛吃了之后,其余牛就不能吃了第一行有N,F,D三个整数接着2-N+1行代表第i头牛,前面两个整 ...

  4. POJ1144Network(求割点个数)

    题目链接 题意:一共n割点,然后若干行,每行第一个输入一个点,然后若干个点表示与他相连,0单独一行表示一个样例的结束.然后求图中的割点个数 割点:去掉该点之后得到的图不在连通,那么该店就是割点 一般割 ...

  5. python不同模式打开文件的完全列表

    模式 描述 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. rb 以二进制格式打开一个文件用于只读.文件指针将会放在文件的开头.这是默认模式. r+ 打开一个文件用于读写.文件指 ...

  6. WinForm------BarManager中各种属性设置

    1.offset:红色Tool距离左边Tool的偏移量

  7. 《零成本实现Web性能测试:基于Apache JMeter》读书笔记

    1.性能测试概念 性能测试目的: 评估系统能力,验证系统是否符合预期性能指标 识别系统中的弱点 系统调优,改进系统性能 检测长时间运行可能发生的问题,揭示隐含问题 验证稳定性.可靠性 常见性能指标 B ...

  8. 关键词提取1-C#

    C# 中文分词算法(实现从文章中提取关键字算法) using System;using System.IO;using System.Text;using System.Collections;usi ...

  9. JavaWeb文件下载,提示用户保存而不是让浏览器直接打开

    1.通过HttpServletResponse对象实现文件下载 服务端向客户端游览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt.jpg等,会直接在浏览器中显示,如果需 ...

  10. HTTP2.0的二进制分帧

    1.帧的类型: 在二进制分帧的结构中,头部有8个字节(64Bit),其中有一个字节(8Bit)来标志帧的类型: HTTP2.0规定了如下帧类型: DATA: 用于传输HTTP消息体 HEADERS:用 ...