다트 프로그래밍-수업
Dart는 객체 지향 언어입니다. 클래스, 인터페이스 등과 같은 객체 지향 프로그래밍 기능을 지원합니다. AclassOOP 측면에서 보면 객체 생성을위한 청사진입니다. ㅏclass객체에 대한 데이터를 캡슐화합니다. Dart는이 개념을 기본적으로 지원합니다.class.
클래스 선언
사용 class 선언 할 키워드 class다트에서. 클래스 정의는 키워드 class로 시작하여class name; 클래스 본문은 한 쌍의 중괄호로 묶여 있습니다. 동일한 구문은 다음과 같습니다.
통사론
class class_name {
<fields>
<getters/setters>
<constructors>
<functions>
}
그만큼 class키워드 다음에 클래스 이름이옵니다. 클래스 이름을 지정할 때 식별자에 대한 규칙을 고려해야합니다.
클래스 정의에는 다음이 포함될 수 있습니다.
Fields− 필드는 클래스에서 선언 된 모든 변수입니다. 필드는 개체와 관련된 데이터를 나타냅니다.
Setters and Getters− 프로그램이 클래스의 필드 값을 초기화하고 검색 할 수 있도록합니다. 기본 getter / setter는 모든 클래스와 연관됩니다. 그러나 기본 설정은 setter / getter를 명시 적으로 정의하여 재정의 할 수 있습니다.
Constructors − 클래스의 객체에 대한 메모리 할당을 담당합니다.
Functions− 함수는 개체가 취할 수있는 작업을 나타냅니다. 또한 때때로 메서드라고도합니다.
이러한 구성 요소를 합쳐서 data members 수업의.
예 : 클래스 선언
class Car {
// field
String engine = "E1001";
// function
void disp() {
print(engine);
}
}
이 예제는 클래스를 선언합니다. Car. 클래스에는 다음과 같은 필드가 있습니다.engine. 그만큼disp() 필드의 값을 인쇄하는 간단한 함수입니다. engine.
클래스의 인스턴스 만들기
클래스의 인스턴스를 만들려면 new키워드 다음에 클래스 이름이옵니다. 동일한 구문은 다음과 같습니다.
통사론
var object_name = new class_name([ arguments ])
그만큼 new 키워드는 인스턴스화를 담당합니다.
표현식의 오른쪽은 생성자를 호출합니다. 생성자는 매개 변수화 된 경우 값을 전달해야합니다.
예 : 클래스 인스턴스화
var obj = new Car("Engine 1")
속성 및 함수 액세스
클래스의 속성과 함수는 객체를 통해 액세스 할 수 있습니다. 사용 '.' 점 표기법 (period)를 사용하여 클래스의 데이터 멤버에 액세스합니다.
//accessing an attribute
obj.field_name
//accessing a function
obj.function_name()
예
Dart에서 속성과 기능에 액세스하는 방법을 이해하려면 다음 예제를 살펴보십시오.
void main() {
Car c= new Car();
c.disp();
}
class Car {
// field
String engine = "E1001";
// function
void disp() {
print(engine);
}
}
그만큼 output 위의 코드는 다음과 같습니다.
E1001
Dart 생성자
생성자는 클래스의 변수 초기화를 담당하는 클래스의 특수 함수입니다. Dart는 클래스와 동일한 이름의 생성자를 정의합니다. 생성자는 함수이므로 매개 변수화 할 수 있습니다. 그러나 함수와 달리 생성자는 반환 유형을 가질 수 없습니다. 생성자를 선언하지 않으면 기본값no-argument constructor 당신을 위해 제공됩니다.
통사론
Class_name(parameter_list) {
//constructor body
}
예
다음 예제는 Dart에서 생성자를 사용하는 방법을 보여줍니다-
void main() {
Car c = new Car('E1001');
}
class Car {
Car(String engine) {
print(engine);
}
}
다음을 생성해야합니다. output −
E1001
명명 된 생성자
다트는 named constructors 클래스 정의를 활성화하려면 multiple constructors. 명명 된 생성자의 구문은 다음과 같습니다.
구문 : 생성자 정의
Class_name.constructor_name(param_list)
예
다음 예제는 Dart에서 명명 된 생성자를 사용하는 방법을 보여줍니다.
void main() {
Car c1 = new Car.namedConst('E1001');
Car c2 = new Car();
}
class Car {
Car() {
print("Non-parameterized constructor invoked");
}
Car.namedConst(String engine) {
print("The engine is : ${engine}");
}
}
다음을 생성해야합니다. output −
The engine is : E1001
Non-parameterized constructor invoked
this 키워드
그만큼 this키워드는 클래스의 현재 인스턴스를 나타냅니다. 여기서 매개 변수 이름과 클래스 필드 이름은 동일합니다. 따라서 모호함을 피하기 위해 클래스의 필드 앞에this예어. 다음 예제는 동일하게 설명합니다-
예
다음 예제는 사용 방법을 설명합니다. this Dart의 키워드 −
void main() {
Car c1 = new Car('E1001');
}
class Car {
String engine;
Car(String engine) {
this.engine = engine;
print("The engine is : ${engine}");
}
}
다음을 생성해야합니다. output −
The engine is : E1001
Dart Class ─ 게터 및 세터
Getters 과 Setters라고도 함 accessors 과 mutators, 프로그램이 클래스 필드의 값을 각각 초기화하고 검색 할 수 있도록합니다. 게터 또는 접근자는get예어. 세터 또는 뮤 테이터는set 예어.
기본 getter / setter는 모든 클래스와 연관됩니다. 그러나 기본 설정은 setter / getter를 명시 적으로 정의하여 재정의 할 수 있습니다. getter에는 매개 변수가없고 값을 리턴하고 setter에는 하나의 매개 변수가 있으며 값을 리턴하지 않습니다.
구문 : 게터 정의
Return_type get identifier
{
}
구문 : setter 정의
set identifier
{
}
예
다음 예는 사용 방법을 보여줍니다. getters 과 setters 다트 클래스에서-
class Student {
String name;
int age;
String get stud_name {
return name;
}
void set stud_name(String name) {
this.name = name;
}
void set stud_age(int age) {
if(age<= 0) {
print("Age should be greater than 5");
} else {
this.age = age;
}
}
int get stud_age {
return age;
}
}
void main() {
Student s1 = new Student();
s1.stud_name = 'MARK';
s1.stud_age = 0;
print(s1.stud_name);
print(s1.stud_age);
}
이 프로그램 코드는 다음을 생성해야합니다. output −
Age should be greater than 5
MARK
Null
클래스 상속
Dart는 기존 클래스에서 새로운 클래스를 생성하는 프로그램의 기능인 상속 개념을 지원합니다. 새로운 클래스를 만들기 위해 확장 된 클래스를 부모 클래스 / 수퍼 클래스라고합니다. 새로 생성 된 클래스를 하위 / 하위 클래스라고합니다.
클래스는 'extends'키워드를 사용하여 다른 클래스에서 상속됩니다. Child classes inherit all properties and methods except constructors from the parent class.
통사론
class child_class_name extends parent_class_name
Note − Dart는 다중 상속을 지원하지 않습니다.
예 : 클래스 상속
다음 예에서는 클래스를 선언합니다. Shape. 클래스는Circle수업. 클래스간에 상속 관계가 있기 때문에 하위 클래스, 즉 클래스Car 부모 클래스 데이터 멤버에 대한 암시 적 액세스를 가져옵니다.
void main() {
var obj = new Circle();
obj.cal_area();
}
class Shape {
void cal_area() {
print("calling calc area defined in the Shape class");
}
}
class Circle extends Shape {}
다음을 생성해야합니다. output −
calling calc area defined in the Shape class
상속 유형
상속은 다음 세 가지 유형이 있습니다.
Single − 모든 클래스는 최대 하나의 상위 클래스에서 확장 할 수 있습니다.
Multiple− 한 클래스는 여러 클래스에서 상속 할 수 있습니다. Dart는 다중 상속을 지원하지 않습니다.
Multi-level − 클래스는 다른 하위 클래스에서 상속 할 수 있습니다.
예
다음 예제는 다중 레벨 상속이 작동하는 방법을 보여줍니다-
void main() {
var obj = new Leaf();
obj.str = "hello";
print(obj.str);
}
class Root {
String str;
}
class Child extends Root {}
class Leaf extends Child {}
//indirectly inherits from Root by virtue of inheritance
클래스 Leaf다중 수준 상속을 통해 Root 및 Child 클래스에서 특성을 파생합니다. 이것의output 다음과 같습니다-
hello
Dart – 클래스 상속 및 메서드 재정의
메서드 재정의는 자식 클래스가 부모 클래스에서 메서드를 재정의하는 메커니즘입니다. 다음 예제는 동일한 것을 보여줍니다-
예
void main() {
Child c = new Child();
c.m1(12);
}
class Parent {
void m1(int a){ print("value of a ${a}");}
}
class Child extends Parent {
@override
void m1(int b) {
print("value of b ${b}");
}
}
다음을 생성해야합니다. output −
value of b 12
함수 매개 변수의 수와 유형은 메서드를 재정의하는 동안 일치해야합니다. 매개 변수 수 또는 데이터 유형이 일치하지 않으면 Dart 컴파일러에서 오류가 발생합니다. 다음 그림은 동일하게 설명합니다.
import 'dart:io';
void main() {
Child c = new Child();
c.m1(12);
}
class Parent {
void m1(int a){ print("value of a ${a}");}
}
class Child extends Parent {
@override
void m1(String b) {
print("value of b ${b}");
}
}
다음을 생성해야합니다. output −
value of b 12
정적 키워드
그만큼 static 키워드는 클래스의 데이터 멤버에 적용 할 수 있습니다. fields 과 methods. 정적 변수는 프로그램이 실행을 마칠 때까지 값을 유지합니다. 정적 멤버는 클래스 이름으로 참조됩니다.
예
class StaticMem {
static int num;
static disp() {
print("The value of num is ${StaticMem.num}") ;
}
}
void main() {
StaticMem.num = 12;
// initialize the static variable }
StaticMem.disp();
// invoke the static method
}
다음을 생성해야합니다. output −
The value of num is 12
슈퍼 키워드
그만큼 super키워드는 클래스의 직계 부모를 참조하는 데 사용됩니다. 키워드는 a의 슈퍼 클래스 버전을 참조하는 데 사용할 수 있습니다.variable, property, 또는 method. 다음 예제는 동일한 것을 보여줍니다-
예
void main() {
Child c = new Child();
c.m1(12);
}
class Parent {
String msg = "message variable from the parent class";
void m1(int a){ print("value of a ${a}");}
}
class Child extends Parent {
@override
void m1(int b) {
print("value of b ${b}");
super.m1(13);
print("${super.msg}") ;
}
}
다음을 생성해야합니다. output −
value of b 12
value of a 13
message variable from the parent class